Beregnings- og konverteringstrofasthed
Beregnede arrays komponerer på tværs af selektions-, sorterings-, opslags-, matrix- og omformningsfunktioner med automatisk XLSX-spill-ejerskab, eksplicitte CSE-destinationer og begrænsede evalueringsressourcer
Dynamiske arrays og eksplicitte CSE-arrays
Tildel et array-producerende udtryk til én TXLSXCell.Formula og kald TXLSXWorkbook.Recalculate; resultatet ejer et rektangulært spill forankret i den celle, inklusive formler som SEQUENCE(3,2), A1:A3*10, arraykonstanter og array-værdierede LET-resultater
Sheet.Cells.Item[1, 1].Formula := 'SEQUENCE(3,2)'; Sheet.Cells.Item[1, 4].Formula := 'SUM(A1#)'; Workbook.Recalculate;
Genberegning udvider eller formindsker resultatet, rydder kun forældede efterfølgere ejet af ankeret og genopbygger afhængigheder, når omfanget ændres; referencer til nyoprettede efterfølgere og A1#-spilloperatoren bruger det aktuelle omfang
Eksisterende værdier, formler, rich text, andre arrays, flettede områder, tabeller og regnearksgrænser blokerer et spill og giver #SPILL!; formater på i øvrigt tomme celler forbliver brugbare, og fjernelse af en blokering lader næste genberegning prøve ankeret igen
Redigering af en efterfølger med en værdi eller rich text frigør cellen fra ankeret, så næste beregning bevarer redigeringen som en blokering; fjernes eller ryddes ankeret, frigives dets ejede efterfølgere, mens ConvertFormulasToValues beholder deres beregnede værdier som almindelige celler
XLSX-gemning gemmer det aktuelle arrayomfang og metadata, og indlæsning gendanner ejerskabet af eksisterende cachede efterfølgere før genberegning; arrayformler med fejl beholder stadig deres omfang, når fejlene tilhører enkelte elementer
SetArrayFormula forbliver det eksplicitte fastinterval-CSE-indgangspunkt i begge projektmappemotorer; rå områdearitmetik evalueres element for element inde i det interval, mens almindelige skalare formler beholder implicit intersection
Den unære @-operator skærer en reference med formelcellen og tager det første element af et beregnet array; SINGLE og ANCHORARRAY accepteres som lageraliasser for implicit intersection og spillreferencer
MAP accepterer flere inputarrays og en matchende LAMBDA-parameterliste, propagerer elementfejl og afviser indlejrede arrayresultater med #CALC!; FILTER accepterer beregnede arrays samt række- eller kolonnemasker, inklusive fejlpropagering og et tomt resultat som #CALC!, når intet fallback er leveret
Dynamisk spill-mutation kører serieligt, selv når flere beregningstråde er konfigureret; omfangsstabilisering er begrænset til 32 passeringer, og dynamiske arrays i cirkulære iterative beregninger afvises i stedet for at blive behandlet som skalare resultater
INDEX accepterer referencer, arraykonstanter og beregnede arrays; når begge selektorer er skalare, returnerer positive række- og kolonneselektorer én værdi, en nulselektor returnerer den valgte række eller kolonne, og to nulselektorer returnerer det komplette array; en referenceskilde med skalare selektorer bevarer referenceadfærden for forbrugere som ROW og ISREF
Række- og kolonneselektorer kan også være arrays, inklusive konstanter, beregnede vektorer, områdeværdier og LET-bindinger; modstående række- og kolonneorienteringer broadcastes til et rektangulært krydsprodukt, mens ens orienteringer vælger parrede positioner; singleton-dimensioner broadcastes, og manglende positioner i ulige dimensioner returnerer enkelte #N/A-værdier
Når en af selektorerne er et array, vælger nul eller en udeladt selektor det første medlem af den akse i stedet for at udvide en hel række eller kolonne; fraktionerede selektorer trunkeres mod nul, negative selektorer returnerer enkelte #VALUE!-værdier før trunkering, og selektorer uden for kildegrænserne returnerer enkelte #REF!-værdier; valgte strenge, booleske værdier og typede fejl beholder deres typer
SORT og UNIQUE accepterer områder, konstanter og beregnede arrays, inklusive indlejrede FILTER, SEQUENCE og LET-resultater; række- og kolonneorientering, stigende eller faldende sortering, første-forekomst-rækkefølge og exactly-once-deduplikation følger samme kontrakt for hver kildeform
Projektmappedefinerede navne kan levere reference-, skalar- eller beregnede array-kilder; ISREF(INDEX(...)) adskiller et faktisk referenceresultat fra en navngivet beregnet værdi; skalare INDEX-selektorer og SORT-numerknapper trunkerer fraktionerede værdier, og valgfrie booleske argumenter afviser tekst andet end TRUE eller FALSE
Sheet.Cells.Item[1, 6].Formula := 'SORT(UNIQUE(FILTER(A1:B5,A1:A5>1)),1,-1)'; Sheet.Cells.Item[1, 9].Formula := 'INDEX(SORT(UNIQUE(A1:B5)),0,2)'; Sheet.Cells.Item[1, 12].Formula := 'INDEX(SEQUENCE(2,3,10,2),2,3)'; Workbook.Recalculate;
Sheet.Cells.Item[1, 1].Formula := 'INDEX(SEQUENCE(3,3),{1;3},{1,3})';
Workbook.Recalculate;
Dette selektoreksempel spiller {1,3;7,9} ud i et to-gange-to-resultat; INDEX(SEQUENCE(3,3),{1;3},{1;3}) returnerer i stedet den parrede kolonne {1;9}; arrayselektorer giver værdier, selv når kilden er en reference, mens skalare referenceselektorer bevarer referenceidentiteten
Disse udtryk kan spille ud og ændre størrelse i XLSX eller evaluere inde i en eksplicit CSE-destination; fejl fra array-kilder forbliver typede, og et tomt exactly-once-resultat returnerer #CALC!; selektoroutput forbruger evalueringsstep-budgettet, og de kombinerede kilde-, selektor- og resultatmatrix-payloads tjekkes mod arrayhukommelsesbudgettet
INDEX accepterer et eksplicit fjerde area_num-argument på 1 for en beregnet kilde, og række-, kolonne- og områdeselektorer kan broadcastes sammen over en understøttet referenceunion på samme ark; faktiske multiområdesreferencer bevarer identiteten gennem lokale definerede navne og LET, mens skalar CHOOSE bevarer den valgte reference, inklusive et valg på et andet ark; selektor-array-resultater er værdier frem for indlejrede referencearrays; se INDEX-områdevalg og referenceidentitet for nul-, udeladt-, tvangskonverterings- og fejlregler
Til selvstændig beregning accepterer TXLSCalculator.OnGetSpillRange et TXLSGetSpillRange-callback, der opløser de aktuelle inklusive grænser for et anker; projektmappens evaluatorer installerer callbacket automatisk
TXLSGetSpillRange = function(SheetIndex, AnchorRow, AnchorCol: Integer; var LastRow, LastCol: Integer): Integer of object;
lxNormalizeStorageFormula normaliserer skrevet formelsyntaks til OOXML, lxTryStorageFormulaOperators oversætter spill- og implicit-intersection-operatorer, og lxApplyXlfnPrefix tilføjer påkrævede future-function-præfikser; beskyttet tekst og arrayrække-separatorer forbliver intakte, og tildeling af en formel beholder kalderens tekst i hukommelsen
Gemning ændrer ikke det skrevne in-memory-udtryk; genåbning af nyligt skrevne XLSX-formler returnerer kanonisk lagersyntaks med kommaargumenter og uden indledende =, konsistent med native Excel-importer; uændret importeret formel-XML beholder sin eksisterende bevaringssti
Opslags-, matrix- og omformningskomposition
TRANSPOSE accepterer referencer, konstanter og beregnede arrays og bevarer tekst, booleske værdier og enkelte fejl; tomme kildeceller bliver numerisk nul
MMULT, MDETERM og MINVERSE accepterer beregnede matricer og indlejrede udtryk som MMULT(MUNIT(2),SEQUENCE(2,2)); deres matrixindgange skal være numeriske, med tekst, booleske værdier og blanke afvist frem for tvangskonverteret, og kildefejl beholder deres fejlkoder
CHOOSECOLS og CHOOSEROWS accepterer skalare eller endimensionelle selektorvektorer, konkatenerer selektorer i argumentrækkefølgen, beholder dubletter og tæller negative indekser fra enden; fraktionerede selektorer trunkeres mod nul, nul- og out-of-range-selektorer afvises, og todimensionelle selektormatricer understøttes ikke
XLOOKUP, XMATCH og MATCH accepterer beregnede opslagsvektorer og array-værdierede opslagsanmodninger; nøgler skal optage én række eller én kolonne, og XLOOKUP-returarrays skal stemme overens med den opslagsakse
En skalar XLOOKUP kan returnere en hel matchende række eller kolonne, inklusive typede fejl; en array-værdieret opslagsanmodning beholder sin egen form og tager den første komponent af hvert matchende udsnit eller fallback-array
Eksakte opslagsscanninger springer fejlindgange over i nøglevektoren; booleske, numeriske og tekstnøgler forbliver adskilte, mens almindelige skalare referencestier beholder deres eksisterende streaming- og genberegning-cache-adfærd; binære søgemetoder kræver stadig korrekt sorterede nøgler
VSTACK, HSTACK, TAKE, DROP, TOROW, TOCOL, WRAPROWS, WRAPCOLS og EXPAND accepterer beregnede input og typede polstringer; et resultat uden rækker eller kolonner returnerer #CALC!, og wrapping kræver endimensionelt input
Matrixarbejde, opslagsscanning, selektorgennemløb, kopiering og polstring forbruger evalueringsstep-budgettet; samtidigt tilbageholdte input-, arbejds- og outputmatrix-payloads tjekkes mod den konfigurerede arrayhukommelsesgrænse før allokering
Sheet.Cells.Item[1, 1].Formula := 'XLOOKUP({1;3},SEQUENCE(3),SEQUENCE(3,2))';
Sheet.Cells.Item[1, 4].Formula := 'CHOOSECOLS(SEQUENCE(2,3),{-1;1})';
Sheet.Cells.Item[1, 7].Formula := 'TRANSPOSE(UNIQUE({"A";"B";"A"}))';
Workbook.Recalculate;
Typede moderne beregningsfejl
#SPILL! og #CALC! forbliver typede cellefejl gennem beregning, visning, cacheinspektion og XLSX-genåbning; XLSX-output bærer deres rich-value-metadata, mens standard cached-error-fallbacken beholdes for læsere, der ikke forstår den udvidelse
Formeltekstresultater, inklusive CSE- og dynamiske array-efterfølgere, bruger literal string caches, så Excel kan vise dem før genberegning; almindelige værdiceller fortsætter med at bruge delte strenge
Moderne rich-error-output inkluderer projektmappens version og Rich Data-beregningsfunktionsdeklarationer, som Excel kræver for at fortolke disse caches før genberegning; den udsendte calcId er mindst 191029 og bevarer højere anmodede værdier uden at ændre projektmappens in-memory CalcId-egenskab
Importeret celle- og værdimetadata, urelaterede rich-value-strukturer og ugennemsigtige buckets beholder deres oprindelige identiteter, når nye fejl-buckets tilføjes; udskiftning af en fejlcelle rydder forældet typet fejl-metadata ved gemning
TXLSXRichErrorCodes er integer-array-typen til afkodede rich-error-buckets; applikationskode læser typede fejl fra cellens Variant-værdi
BIFF8 kan ikke repræsentere disse moderne fejl eller spilloperatorer troværdigt; Classic-serialisatoren afviser ikke-understøttede moderne repræsentationer i stedet for at tildele en urelateret legacy-fejlkode
Konverteringspreflight
TXLSXWorkbook.GetConversionReport returnerer en kalder-ejet TXLSConversionReport uden at genberegne eller ændre projektmappen; typerne er deklareret i lxDiagnostics
Report := Workbook.GetConversionReport(xlsConversionOpenDocument);
try
for I := 0 to Report.Count - 1 do
InspectIssue(Report.Items[I]);
finally
Report.Free;
end;
| Target | xlsConversionOpenXmlWorkbook, xlsConversionOpenXmlTemplate, xlsConversionMacroEnabledTemplate, xlsConversionOpenDocument, xlsConversionExcel97Workbook eller xlsConversionExcelBinaryWorkbook |
| Fidelity | TXLSConversionFidelity: xlsConversionPreserved, xlsConversionDegraded, xlsConversionDropped eller xlsConversionUnsupported |
| Issue | TXLSConversionIssue eksponerer Feature, Fidelity, SheetIndex, SheetName, Location og Message; HasLoss inkluderer degraded-, dropped- og unsupported-indgange |
Rapporten opremser kendte formattab såsom VBA, beskyttelse, projektmappevisninger, forbindelser, forespørgselsestabeller, kommentarer, eksterne links, XML maps, tabelstruktur, filterkriterier, tegninger, typede fejl-caches, ikke-understøttet validerings- eller formelsyntaks, array-ejerskab og ugennemsigtige udvidelsesdele; den beskriver de implementerede konverteringsstier og certificerer ikke hver funktion i hver ekstern applikation
ODS beholder almindelige tabelceller, cachede formelresultater, understøttet annotationstekst og forfattere, adgangskodefri regnearksbeskyttelse og repræsenterbare filtre, mens Excel-tabelobjektet, rigere chartgeometri eller ikke-understøttede regelsemantikker går tabt; en ugennemsigtig OOXML-bevaringspayload rapporteres som dropped, når målet ikke kan bære den
XLSX-facaden rapporterer BIFF8-output som ikke-understøttet; brug Classic-projektmappens API til understøttede BIFF-workflows; version 2.384.93 tilføjer en begrænset XLSB værdi- og format-backend, der afviser urepræsenterede formler, funktionsobjekter, metadata og beregningsindstillinger ved både kontrolleret og ukontrolleret gemning
Kontrolleret gemning
Status := Workbook.SaveAsChecked(Stream, xlsxOpenDocumentSpreadsheet, False);
Fil- og stream-overloaderne kører known-loss-preflighten før skrivning; AllowLossy=False afviser degraded eller droppede funktioner med konverteringsdiagnostik, mens AllowLossy=True eksplicit accepterer de tab og stadig afviser ikke-understøttede konverteringer
Afvist preflight efterlader destinationsbytes og streamposition uændret; succesfulde anmodninger bruger den eksisterende save-transaktion og returnerer de samme statuskonventioner som SaveAs
Almindelig SaveAs forbliver tilgængelig med sin eksisterende adfærd; applikationer der kræver en eksplicit tabsbeslutning bør inspicere rapporten og bruge kontrolleret gemning
Skabelonformater
xlsxOpenXMLTemplate vælger makrofri XLTX, mens xlsxOpenXMLMacroEnabledTemplate vælger XLTM og bevarer et eksisterende VBA-projekt; formatet er eksplicit og udledes ikke af en filendelse eller importeret skabelon
Makrofri XLTX afviser en projektmappe med VBA, selv når tabsfuld kontrolleret gemning er aktiveret; en XLTM-pakke kan udsendes uden et VBA-projekt, og HotXLS opretter ikke VBA-kode
ODS-valideringsformler
Brugerdefineret boolesk validering bruger of:is-true-formula(...); understøttede skalare grænser, listekilder, kvalificerede A1-referencer, strenge og argumentseparatorer oversættes til OpenFormula og rebaseres mod valideringens basecelleadresse ved import
Ikke-understøttede strukturerede, eksterne eller tredimensionelle valideringsudtryk udelades sammen med deres cellereferencer, hvilket undgår hængende valideringsdefinitioner; konverteringspreflighten rapporterer de udeladte regler
ODS-annotationer, beskyttelse og filtre
Almindelige cellekommentarer eksporteres som OpenDocument-annotationer med deres tekst og forfatter, inklusive tomme noter, tabulatorer, mellemrum og linjeskift; noter på i øvrigt fraværende celler og fjerne koordinater bruger sparsomme gentagne række- og kolonneforløb uden at oprette regnearksceller
En kommentar på et flettet områdes ankercelle beholder sin adresse; en note på en dækket celle eller uden for regnearksnettet rapporteres som dropped; rich kommentartekst fladtrykkes til sin viste tekst, og konverteringsrapporter identificerer tabet af run-formatering, brugerdefinerede boksdimensioner og altid-synlig-præsentation
OpenDocuments beskyttede flag og understøttede låste eller ulåste celleformater beholder; den tabsfri regnearksdelmængde bruger ingen adgangskode eller redigerbare-områder-undtagelser og tillader kun valg af låste og ulåste celler
Sheet.Protect; Sheet.SheetProtectionOptions := [xlsxSpoSelectLockedCells, xlsxSpoSelectUnlockedCells]; Sheet.Range['B2:B100'].Locked := False;
Excel-adgangskodehashes, moderne adgangskodeindstillinger, redigerbare områder og handlingstilladelser uden for den delmængde rapporteres som degraded, mens det beskyttede flag forbliver; Excels brede standardtilladelsessæt kræver også en eksplicit tabsbeslutning
OpenDocument-import beholder det beskyttede flag og cellelåsformaterne; native adgangskodehashes konverteres ikke til Excel-hashes, og urepræsenteret importeret tilladelsesmetadata forbliver et navngivet tab i efterfølgende konverteringsrapporter
AutoFilter-eksport understøtter seks skalare sammenligningsoperatorer, op til to skalare betingelser pr. kolonne forbundet med AND eller OR samt en AND mellem kolonner; understøttede rene værdivalglister og tomme valg har ingen to-værdi-grænse og forbliver native filtermetadata
Numeriske skalarkriterier bruger invariant endelige værdier; tekstvalg beholder deres literaltegn, inklusive jokertegn inde i valglister, mens jokertegnudtryk i brugerdefinerede filtre, tvetydige booleske kriterier, datogrupper, dynamiske datoer samt farve- og ikonfiltre ikke har en understøttet ækvivalent konvertering
Ikke-understøttede filterudtryk udelades som et komplet udtryk i stedet for at svække udvalgte betingelser; filterområdet forbliver, og konverteringsrapporten identificerer de udeladte kriterier
ODS-stream-gemning klargør den færdige pakke i en registreret midlertidig fil, før der skrives ved destinationens oprindelige position; eksisterende foranstillede bytes og absolutte ZIP-offsets beholdes, inklusive positioner ud over den oprindelige slutning; annullering eller en progress-callback-exception før commit bevarer destinationens bytes, størrelse og position og frigør den midlertidige fil; den afsluttende skrivningsnotifikation forbliver ikke-annullerbar
OpenDocument-import understøtter de samme skalare konjunktioner og samme-kolonne tekstdisjunktioner eller værdisæt; kolonnekrydsende OR, regulære udtryk, versalfølsomme sammenligninger og ikke-understøttede native filteroperatorer forbliver eksplicitte importerede tab
TXLSXOdsImportLoss og TXLSXOdsImportLosses beskriver de private regnearksprovenienskategorier; konverteringsrapporter bruger ImportedOdsProtectionPassword, ImportedOdsProtectionOptions, ImportedOdsFilterCriteria og ImportedOdsCommentFormatting; de overlever regnearkskopiering og optræder for både OpenDocument- og Open XML-konverteringsmål
Filterkonvertering beholder metadata og eksisterende rækkevidde uden at anvende filtre eller genberegne celler; native applikationer forbliver ansvarlige for deres egen filtrerings- og redigeringsadfærd