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;
| Target | xlsConversionOpenXmlWorkbook, xlsConversionOpenXmlTemplate, xlsConversionMacroEnabledTemplate, xlsConversionOpenDocument, xlsConversionExcel97Workbook, eller xlsConversionExcelBinaryWorkbook |
| Fidelity | TXLSConversionFidelity: xlsConversionPreserved, xlsConversionDegraded, xlsConversionDropped, eller xlsConversionUnsupported |
| Issue | TXLSConversionIssue 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