HotXLS-dokumentation

Beräknings- och konverteringstrohet

Beräknade matriser kombineras över urvals-, sorterings-, uppslagnings-, matris- och omformningsfunktioner, med automatiskt XLSX-spillägarskap, explicita CSE-mål och begränsade utvärderingsresurser

Dynamiska matriser och explicita CSE-matriser

Tilldela ett matrisproducerande uttryck till en TXLSXCell.Formula och anropa TXLSXWorkbook.Recalculate; resultatet äger ett rektangulärt spill förankrat i den cellen, med formler som SEQUENCE(3,2), A1:A3*10, matriskonstanter och matrisvärderade LET-resultat

Sheet.Cells.Item[1, 1].Formula := 'SEQUENCE(3,2)';
Sheet.Cells.Item[1, 4].Formula := 'SUM(A1#)';
Workbook.Recalculate;

Omberäkningen växer eller krymper resultatet, rensar bara föråldrade efterföljare som ägs av ankaret och bygger om beroenden när omfattningen ändras; referenser till nyskapade efterföljare och A1#-spilloperatorn använder den aktuella omfattningen

Befintliga värden, formler, rich text, andra matriser, sammanfogade områden, tabeller och kalkylbladsgränser blockerar ett spill och ger #SPILL!; format på annars tomma celler förblir användbara, och en borttagen blockering låter nästa omberäkning försöka igen med ankaret

Redigerar man en efterföljare med ett värde eller rich text kopplas cellen loss från ankaret, så att nästa beräkning bevarar redigeringen som en blockering; tas ankaret bort eller rensas det släpper det sina ägda efterföljare, medan ConvertFormulasToValues behåller deras beräknade värden som vanliga celler

XLSX-sparning registrerar den aktuella matrisomfattningen och metadata, och inläsning återställer ägarskapet för befintliga cachade efterföljare före omberäkningen; matrisformler som innehåller fel behåller ändå sin omfattning när felen hör till enskilda element

SetArrayFormula är fortfarande den uttryckliga CSE-ingången med fast område i båda arbetsboksmotorerna; aritmetik på råa områden utvärderas element för element inom det området, medan vanliga skalära formler behåller implicit skärning

Den unära @-operatorn skär en referens med formelcellen och tar det första elementet i en beräknad matris; SINGLE och ANCHORARRAY är godkända lagringsalias för implicit skärning och spillreferenser

MAP accepterar flera indatamatriser och en matchande LAMBDA-parameterlista, propagerar elementfel och avslår nästlade matrisresultat med #CALC!; FILTER accepterar beräknade matriser och rad- eller kolumnmasker, inklusive felpropagering och ett #CALC! för tomt resultat när ingen fallback har angetts

Dynamisk spillmutation körs seriellt även när flera beräkningstrådar är konfigurerade; stabiliseringen av omfattningen begränsas till 32 varv, och dynamiska matriser i cirkulära iterativa beräkningar avslås i stället för att behandlas som skalära resultat

INDEX accepterar referenser, matriskonstanter och beräknade matriser; när båda väljarna är skalära ger positiva rad- och kolumnväljare ett värde, en nollväljare ger den valda raden eller kolumnen, och två nollväljare ger hela matrisen; en referenskälla med skalära väljare behåller referensbeteendet för konsumenter som ROW och ISREF

Rad- och kolumnväljare kan också vara matriser, inklusive konstanter, beräknade vektorer, områdesvärden och LET-bindningar; motstridiga rad- och kolumnorienteringar broadcastas till en rektangulär korsprodukt, medan matchande orienteringar väljer parade positioner; singleton-dimensioner broadcastas, och saknade positioner i ojämna dimensioner ger enskilda #N/A-värden

När någon av väljarna är en matris väljer noll eller en utelämnad väljare det första elementet på den axeln i stället för att expandera en hel rad eller kolumn; decimalväljare trunkeras mot noll, negativa väljare ger enskilda #VALUE!-värden före trunkeringen, och väljare utanför källans gränser ger enskilda #REF!-värden; valda strängar, Boolean-värden och typade fel behåller sina typer

SORT och UNIQUE accepterar områden, konstanter och beräknade matriser, inklusive nästlade FILTER-, SEQUENCE- och LET-resultat; rad- och kolumnorientering, stigande eller fallande sortering, ordning efter första förekomst och deduplicering med exakt-en-gång följer samma kontrakt för varje källform

Arbetsboksdefinierade namn kan leverera referens-, skalära eller beräknade matriskällor; ISREF(INDEX(...)) skiljer ett verkligt referensresultat från ett namngivet beräknat värde; skalära INDEX-väljare och de numeriska alternativen i SORT trunkerar decimalvärden, och valfria Boolean-argument avslår text som inte är 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;

Det här väljarexemplet spiller {1,3;7,9} som ett resultat på två gånger två; INDEX(SEQUENCE(3,3),{1;3},{1;3}) returnerar i stället den parade kolumnen {1;9}; matrisväljare ger värden även när källan är en referens, medan skalära referensväljare bevarar referensidentiteten

De här uttrycken kan spilla och ändra storlek i XLSX eller utvärderas inuti ett explicit CSE-mål; fel från matriskällor förblir typade, och ett tomt exakt-en-gång-resultat returnerar #CALC!; väljarutdata förbrukar utvärderingsstegsbudgeten, och den kombinerade nyttolasten av käll-, väljar- och resultatmatriser kontrolleras mot minnesbudgeten för matriser

INDEX accepterar ett uttryckligt fjärde area_num-argument med värdet 1 för en beräknad källa, och rad-, kolumn- och områdesväljare kan broadcastas tillsammans över en stödd referensförening inom samma kalkylblad; verkliga referenser med flera områden behåller identiteten via lokala definierade namn och LET, medan skalär CHOOSE behåller den valda referensen, även ett val på ett annat kalkylblad; resultat från väljarmatriser är värden och inte nästlade referensmatriser; se INDEX-områdesval och referensidentitet för regler kring noll, saknade värden, tvångskonvertering och fel

För fristående beräkning accepterar TXLSCalculator.OnGetSpillRange en TXLSGetSpillRange-callback som tar fram ankarets aktuella inklusive gränser; utvärderare med arbetsboksunderlag installerar den callbacken automatiskt

TXLSGetSpillRange = function(SheetIndex, AnchorRow, AnchorCol: Integer;
  var LastRow, LastCol: Integer): Integer of object;

lxNormalizeStorageFormula normaliserar författad formelsyntax för OOXML, lxTryStorageFormulaOperators översätter spill- och implicit-skärningsoperatorer, och lxApplyXlfnPrefix lägger på nödvändiga prefix för framtida funktioner; skyddad text och matrisradseparatorer lämnas orörda, och en tilldelad formel behåller uppringarens text i minnet

Sparandet ändrar inte det författade uttrycket i minnet; återöppning av nyskrivna XLSX-formler returnerar kanonisk lagringssyntax med kommaargument och utan inledande =, i linje med inbyggda Excel-importer; oförändrad importerad formel-XML behåller sin befintliga bevarandeväg

Kombination av uppslagning, matriser och omformning

TRANSPOSE accepterar referenser, konstanter och beräknade matriser och bevarar text, Boolean-värden och enskilda fel; tomma källceller blir numerisk noll

MMULT, MDETERM och MINVERSE accepterar beräknade matriser och nästlade uttryck som MMULT(MUNIT(2),SEQUENCE(2,2)); matrisernas element måste vara numeriska, med text, Boolean-värden och tomma celler avslagna i stället för tvångskonverterade, medan källfel behåller sina felkoder

CHOOSECOLS och CHOOSEROWS accepterar skalära eller endimensionella väljarvektorer, sammanfogar väljare i argumentordning, bevarar dubbletter och räknar negativa index från slutet; decimalväljare trunkeras mot noll, noll- och intervallöverskridande väljare avslås, och tvådimensionella väljarmatriser stöds inte

XLOOKUP, XMATCH och MATCH accepterar beräknade uppslagsvektorer och matrisvärderade uppslagsbegäranden; nycklar måste uppta en rad eller en kolumn, och XLOOKUP:s resultatmatriser måste ligga i linje med den uppslagsaxeln

En skalär XLOOKUP kan returnera en hel matchande rad eller kolumn, inklusive typade fel; en matrisvärderad uppslagsbegäran behåller sin egen form och tar den första komponenten ur varje matchande sektions- eller fallbackmatris

Exakta uppslagssökningar hoppar över felposter i nyckelvektorn; Boolean-, numeriska och textnycklar förblir åtskilda, medan vanliga skalära referensvägar behåller sitt befintliga strömnings- och omberäkningscachebeteende; binära söklägen kräver fortfarande korrekt sorterade nycklar

VSTACK, HSTACK, TAKE, DROP, TOROW, TOCOL, WRAPROWS, WRAPCOLS och EXPAND accepterar beräknade indata och typad utfyllnad; ett resultat utan rader eller kolumner returnerar #CALC!, och blockindelning kräver en endimensionell indata

Matrisarbete, uppslagssökningar, väljartraversering, kopiering och utfyllnad förbrukar utvärderingsstegsbudgeten; samtidigt hållna nyttolaster för in-, arbets- och utdatamatriser kontrolleras mot den konfigurerade matrisminnesgränsen innan 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;

Typade moderna beräkningsfel

#SPILL! och #CALC! förblir typade cellfel genom beräkning, visning, cacheinspektion och XLSX-återöppning; XLSX-utdata bär deras rich value-metadata samtidigt som standardfallbacken med cachat fel behålls för läsare som inte förstår det tillägget

Formeltextresultat, inklusive CSE- och dynamiska matrisefterföljare, använder literalsträngcacher så att Excel kan visa dem före omberäkningen; vanliga värdeceller fortsätter att använda delade strängar

Modern rich error-utdata innehåller arbetsboksversionen och Rich Data-deklarationer för beräkningsfunktioner som Excel kräver för att tolka de cacherna före omberäkningen; det utsända calcId är minst 191029, vilket bevarar högre begärda värden utan att arbetsbokens CalcId-egenskap i minnet ändras

Importerad cell- och värdemetadata, orelaterade rich value-strukturer och ogenomskinliga buckets behåller sina ursprungliga identiteter när nya felbucketar läggs till; utbyte av en felcell rensar föråldrad metadata för typade fel vid sparandet

TXLSXRichErrorCodes är heltalsmatristypen som används för avkodade rich error-bucketar; programkod läser typade fel från cellens Variant-värde

BIFF8 kan inte återge de här moderna felen eller spilloperatorerna trovärdigt; Classic-serialiseraren avslår moderna representationer som inte stöds i stället för att tilldela en orelaterad äldre felkod

Konverteringspreflight

TXLSXWorkbook.GetConversionReport returnerar en TXLSConversionReport som ägs av uppringaren, utan att omberäkna eller ändra arbetsboken; typerna deklareras 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 exponerar Feature, Fidelity, SheetIndex, SheetName, Location och Message; HasLoss inkluderar degraderade, borttappade och ostödda poster

Rapporten inventerar kända formatförluster som VBA, skydd, arbetsboksvyer, anslutningar, frågetabeller, kommentarer, externa länkar, XML-maps, tabellstruktur, filterkriterier, ritobjekt, cacher för typade fel, validerings- eller formelsyntax som inte stöds, matrisägarskap och ogenomskinliga tilläggsparts; den beskriver de implementerade konverteringsvägarna och intygar inte varje funktion i varje externt program

ODS behåller vanliga tabellceller, cachade formelresultat, stödd anteckningstext och upphovspersoner, lösenordsfritt kalkylbladsskydd och representerbara filter, men tappar Excel-tabellobjektet, rikare diagramgeometri eller regelsemantik som inte stöds; en ogenomskinlig bevarande-nyttolast i OOXML rapporteras som borttappad när målet inte kan bära den

XLSX-fasaden rapporterar BIFF8-utdata som ostött; använd Classic-arbetsboks-API:t för BIFF-arbetsflöden som stöds; version 2.384.93 lägger till en avgränsad XLSB-backend för värden och format som avslår orepresenterade formler, funktionsobjekt, metadata och beräkningsinställningar i både kontrollerad och okontrollerad sparning

Kontrollerad sparning

Status := Workbook.SaveAsChecked(Stream,
  xlsxOpenDocumentSpreadsheet, False);

Fil- och strömöverladdningarna kör preflighten för kända förluster före skrivningen; AllowLossy=False avslår degraderade eller borttappade funktioner med konverteringsdiagnostik, medan AllowLossy=True uttryckligen accepterar de förlusterna och fortfarande avslår konverteringar som inte stöds

En avslagen preflight lämnar destinationsbyte och strömposition oförändrade; lyckade begäranden använder den befintliga spartransaktionen och returnerar samma statuskonventioner för sparande som SaveAs

Vanlig SaveAs finns kvar med sitt befintliga beteende; program som kräver ett uttryckligt förlustbeslut bör granska rapporten och använda kontrollerad sparning

Mallformat

xlsxOpenXMLTemplate väljer makrofri XLTX, medan xlsxOpenXMLMacroEnabledTemplate väljer XLTM och bevarar ett befintligt VBA-projekt; formatet är uttryckligt och härleds inte från en filändelse eller importerad mall

Makrofri XLTX avslår en arbetsbok med VBA även när förlusttillåtande kontrollerad sparning är aktiverad; ett XLTM-paket kan skrivas utan VBA-projekt, och HotXLS skapar ingen VBA-kod

ODS-valideringsformler

Anpassad Boolean-validering använder of:is-true-formula(...); stödda skalära gränser, listkällor, kvalificerade A1-referenser, strängar och argumentseparatorer översätts till OpenFormula och baseras om mot valideringens bascellsadress vid import

Strukturerade, externa eller tredimensionella valideringsuttryck som inte stöds utelämnas tillsammans med sina cellreferenser, vilket undviker hängande valideringsdefinitioner; konverteringspreflighten rapporterar de utelämnade reglerna

ODS-anteckningar, skydd och filter

Vanliga cellkommentarer exporteras som OpenDocument-anteckningar med sin text och upphovsperson, inklusive tomma noteringar, tabbar, blanksteg och radbrytningar; noteringar på annars frånvarande celler och avlägsna koordinater använder glesa upprepade rad- och kolumnserier utan att skapa kalkylbladsceller

En kommentar på ankarets cell i ett sammanfogat område behåller sin adress; en notering på en täckt cell eller utanför kalkylbladsrutnätet rapporteras som borttappad; rich text i kommentarer plattas ut till sin visade text, och konverteringsrapporter anger förlusten av run-formatering, anpassade rutmått och alltid-synlig presentation

OpenDocuments skyddsflagga och stödda låsta eller olåsta cellformat bevaras; den förlustfria kalkylbladsdelen använder inget lösenord eller undantag för redigerbara områden och tillåter bara markering av låsta och olåsta celler

Sheet.Protect;
Sheet.SheetProtectionOptions :=
  [xlsxSpoSelectLockedCells, xlsxSpoSelectUnlockedCells];
Sheet.Range['B2:B100'].Locked := False;

Excel-lösenordshashar, moderna lösenordsinställningar, redigerbara områden och åtgärdsbehörigheter utanför den delen rapporteras som degraderade medan skyddsflaggan finns kvar; den breda standardbehörighetsuppsättningen i Excel kräver också ett uttryckligt förlustbeslut

OpenDocument-import behåller skyddsflaggan och cellernas låsformat; inbyggda lösenordshashar konverteras inte till Excel-hashar, och orepresenterad importerad behörighetsmetadata förblir en namngiven förlust i efterföljande konverteringsrapporter

AutoFilter-export stöder sex skalära jämförelseoperatorer, upp till två skalära villkor per kolumn förenade med AND eller OR, samt en AND mellan kolumner; stödda listor med enkel värdemarkering och tomval har ingen tvåvärdesgräns och förblir inbyggd filtermetadata

Numeriska skalära kriterier använder invarianta ändliga värden; textval bevarar sina literaltecken, inklusive jokertecken inuti urvalslistor, medan jokerteckenuttryck i anpassade filter, tvetydiga Boolean-kriterier, datumgrupper, dynamiska datum samt färg- och ikonfilter inte har någon stödd motsvarande konvertering

Filteruttryck som inte stöds utelämnas som ett komplett uttryck i stället för att försvaga utvalda villkor; filterområdet finns kvar, och konverteringsrapporten identifierar de utelämnade kriterierna

Strömsparning av ODS mellanlagrar det färdiga paketet i en registrerad temporär fil innan skrivningen sker på destinationens ursprungliga position; befintliga prefixbyte och absoluta ZIP-offsets behålls, även positioner bortom det ursprungliga slutet; avbrott eller ett undantag i en progresscallback före commit bevarar destinationens byte, storlek och position och frigör den temporära filen; den avslutande skrivnotifieringen kan fortfarande inte avbrytas

OpenDocument-import stöder samma skalära konjunktioner och textdisjunktioner eller värdemängder inom samma kolumn; OR över kolumner, reguljära uttryck, skiftlägeskänsliga jämförelser och inbyggda filteroperatorer som inte stöds förblir uttryckliga importförluster

TXLSXOdsImportLoss och TXLSXOdsImportLosses beskriver de interna kalkylbladsprovenienskategorierna; konverteringsrapporter använder ImportedOdsProtectionPassword, ImportedOdsProtectionOptions, ImportedOdsFilterCriteria och ImportedOdsCommentFormatting; de överlever kalkylbladskopiering och visas för både OpenDocument- och Open XML-konverteringsmål

Filterkonverteringen behåller metadata och befintlig radsynlighet utan att tillämpa filter eller omberäkna celler; inbyggda program behåller ansvaret för sitt eget filter- och redigeringsbeteende

Relaterade arbetsflöden