HotXLS-dokumentation

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åde­væ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

Projektmappe­definerede 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;
TargetxlsConversionOpenXmlWorkbook, xlsConversionOpenXmlTemplate, xlsConversionMacroEnabledTemplate, xlsConversionOpenDocument, xlsConversionExcel97Workbook eller xlsConversionExcelBinaryWorkbook
FidelityTXLSConversionFidelity: xlsConversionPreserved, xlsConversionDegraded, xlsConversionDropped eller xlsConversionUnsupported
IssueTXLSConversionIssue 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

Relaterede workflows