Documentazione HotXLS

Token di formula e funzioni utente

HotXLS espone flussi di token di formula di proprietà del chiamante per l'ispezione senza perdite e la riscrittura protetta in entrambi i motori della cartella di lavoro, oltre a registri gerarchici di funzioni utente per il calcolo personalizzato

Modello dei token

TXLSFormulaTokenClass, TXLSFormulaTokenKind e TXLSFormulaTokenSource classificano ogni TXLSFormulaToken e registrano se proviene da testo analizzato, byte BIFF classici o un'altra sorgente supportata

TXLSFormulaTokenKind, Opcode, BaseOpcode, TokenClass, RawBytes, TextValue, NumberValue, IntegerValue, ArgumentCount, FunctionIndex, ExternSheetIndex, Row1, Col1, Row2, Col2, Row1Relative, Col1Relative, Row2Relative, Col2Relative, ReferenceUsesOffsets, Supported, ArrayRows, ArrayCols, ArrayValueCount e ArrayValues
TXLSFormulaTokenStreamDecodeBiff, Clone, CloneSyntaxTree, BindContext, CanCompileFor, CanWriteBiffAt, ReplaceReference, Count, Items, Source, FormulaText, FullyDecoded, Rgce, RgbExtra, BiffWritable e BiffVersion
TXLSCompiledFormulaCreateTokenStream restituisce un clone di proprietà del chiamante del flusso di token della formula compilata
TXLSFormulaArrayFormulaMode, FormulaLocale, MaxRow, MaxCol, FuncNamebyPtg, FuncArgsCntByPtg, GetCompiled, GetCompiledPreservingUnknownNames, GetCompiledR1C1, GetTokenStream, GetTranslated, GetStoreData, GetStoreDataExt, CanStoreData, BindUserDefinedFunctions, GetTExpData, SetMode, IsKnownFunction, GetFunctionNames e FunctionArgumentClass

Ogni motore di cartella di lavoro compila e traduce le formule attraverso una singola istanza condivisa di TXLSFormula: GetCompiled analizza il testo in stile A1 in un albero di sintassi, GetCompiledR1C1 risolve i riferimenti R1C1 rispetto alle coordinate della cella in cui vive la formula, GetTranslated ricostruisce un albero dai byte BIFF classici, e la famiglia GetStoreData riscrive i byte dei token per la memorizzazione. MaxRow e MaxCol delimitano la griglia di riferimenti che il compilatore accetta — il motore XLSX li alza dai valori predefiniti di BIFF8 alla griglia XLSX, e i riferimenti che non stanno in BIFF8 non hanno forma ptg, così gli writer BIFF8 li segnalano come non codificabili

ArrayFormulaMode viene impostato mentre viene scritto il rgce di un record ARRAY (una formula di matrice): i riferimenti di classe valore e le costanti di matrice vengono così serializzati come classe matrice (tAreaA / tArrayA), come li scrive Excel stesso. Con operandi di classe valore Excel valuta la formula di matrice con intersezione implicita invece di trattarla come una vera formula di matrice, ed è per questo che i motori alzano il flag per il rgce del record ARRAY stesso

Ispezione limitata di una foglia memorizzata semplice

TXLSCompiledFormula.ReadSimpleLeafInfo(ExpectedOwner, MaxBytes, MaxTextCharacters, AllowUnboundBiff) esamina l'albero di sintassi principale e qualsiasi flusso di token trattenuto in place, senza clonare, decompilare, valutare o materializzare token o array; il valore predefinito di AllowUnboundBiff è False

Le forme supportate sono una foglia assoluta REF3D o RANGE3D e un letterale stringa, con esattamente un token coerente quando un flusso è trattenuto; espressioni, riferimenti relativi o con offset, array, dati array esterni, token sconosciuti, foglie principali e trattenute non corrispondenti e owner con binding estraneo restituiscono fslkUnsupported senza cambiare i valori in cache o lo stato di calcolo

TXLSFormulaSimpleLeafKindfslkUnsupported, fslkRange o fslkLiteral; esamina Kind prima di usare gli altri campi risultato
TXLSFormulaLeafOwnerStateflosNoRetainedStream segnala l'assenza di provenienza del flusso di token, flosUnboundStream segnala BIFF importato senza binding, flosSameOwner segnala una corrispondenza esatta dell'owner con binding, e flosForeignOwner rifiuta un owner con binding diverso
TXLSFormulaSimpleLeafInfoUn record di valori senza stringhe contenente Kind, OwnerState, RangeType, ExternId, FirstRow, FirstCol, LastRow, LastCol, TextCharacters, StoredTextCharacters, ReadBytes, SyntaxNodes e TokenCount
Range coordinates and identityLe coordinate sono a base zero; ExternId è l'ID logico a base 1 dell'albero di sintassi, non l'indice wire BIFF; il chiamante deve risolverlo attraverso il workbook bloccato e rifiutare workbook esterni, estensioni tra fogli, fogli mancanti o coordinate fuori dal range di cattura supportato
Source costsTextCharacters è la lunghezza dell'output letterale in unità di codice UTF-16, o zero per un range; StoredTextCharacters somma il testo sorgente trattenuto, il testo dei token e il testo di sintassi esaminato; ReadBytes somma il costo a due byte del loro testo e le lunghezze dei byte raw trattenuti, comprese le rappresentazioni trattenute separatamente; questi contatori descrivono gli input dell'ispezione limitata, non l'uso totale dell'heap
Syntax and token countsSyntaxNodes vale uno per una foglia compilata semplice, o due quando vengono verificate sia la foglia principale sia quella trattenuta; TokenCount è zero senza flusso o uno con un flusso trattenuto coerente supportato
TXLSFormulaTokenStream.ReadSimpleLeafInfoIl livello inferiore prende gli stessi owner e quote, un ComparedLeaf opzionale e un ReferenceContext opzionale; verifica direttamente la sintassi privata del flusso, i token e i byte raw; ComparedLeaf aggiunge i controlli di coerenza con la foglia principale, mentre ReferenceContext mappa gli indici extern delle formule testuali serializzate senza copiare
TXLSCompiledFormula.ReadSimpleLiteralPrende gli stessi argomenti, ripete i controlli della foglia e restituisce un WideString di proprietà del chiamante solo dopo che anche le quote rimanenti di byte e caratteri coprono il suo output; foglie non supportate o capacità rimanente insufficiente generano EInvalidOperation

ExpectedOwner deve essere il calcolatore esatto collegato alla sorgente che lo consuma, e deve restare vivo e stabile per tutta l'ispezione e l'estrazione del letterale; un owner mancante genera EArgumentException, quote negative generano EArgumentOutOfRangeException, e input sorgente trattenuti oversized generano EInvalidOperation prima dei confronti di contenuto o della copia dell'output

Una foglia semplice senza flusso trattenuto non stabilisce il suo owner originale; un flusso importato senza binding non porta nemmeno identità di workbook, quindi AllowUnboundBiff=True esplicito è appropriato solo quando il chiamante ha già bloccato il calcolatore della sorgente e validerà l'identità del foglio locale prima di leggere le celle; l'ispezione di riferimenti importati attualmente accetta riferimenti BIFF8 e rifiuta la diversa rappresentazione extern di BIFF5

I campi di sintassi legacy denominati FFirstRowRel, FFirstColRel, FLastRowRel e FLastColRel sono true per coordinate assolute; l'helper verifica anche i flag relativi indipendenti dei token e la rappresentazione con offset, così i consumatori non devono inferire coordinate assolute da questi nomi storici

Albero di sintassi

CloneSyntaxTree restituisce un albero analizzato di proprietà del chiamante, composto da nodi TXLSSyntaxItem per l'ispezione strutturale: ogni nodo espone il proprio ItemType, il payload letterale (Value, IntValue, DecValue), gli Spaces iniziali, i collegamenti dell'albero (Parent, Child, ChildCount), la foglia di riferimento come TXLSRangeItem tramite Range e i dati delle costanti array (ArrayRows, ArrayCols, ArrayValueCount e le voci TXLSArraySerVal in ArrayValues). L'albero è una copia staccata, quindi attraversarlo non tocca mai le formule compilate della cartella di lavoro; i membri di mutazione (AddChild, PushChild, CopyObject, OffsetCopyReferences, AdjustForShift e TXLSRangeItem.CopyObject / AdjustForShift) esistono per i tool che riscrivono un albero clonato prima della ricompilazione

Punti di ingresso della cartella di lavoro

Tokens := Worksheet.ParseFormulaTokens('SUM(A1:A4)', 1, 1);
try
  if Tokens.ReplaceReference(OldRef, NewRef) then
    Worksheet.SetFormulaTokens(1, 1, Tokens);
finally
  Tokens.Free;
end;

ParseFormulaTokens, GetFormulaTokens, FormulaTokensToText e SetFormulaTokens mantengono esplicita la proprietà e convalidano contesto, versione BIFF, supporto dei token, proprietà degli array e limiti dei riferimenti prima che una cella venga modificata

Registri delle funzioni utente

TXLSUserFunctionResolver e TXLSUserFunctionRegistry forniscono la ricerca per nome tramite RegisterHandler, UnregisterHandler, Clear, Contains, TryGetHandler e Count

Workbook.RegisterUserFunction('NETMARGIN', CalculateNetMargin);
Workbook.RegisterGlobalUserFunction('FISCALYEAR', CalculateFiscalYear);
try
  Workbook.Calculate;
finally
  Workbook.UnregisterUserFunction('NETMARGIN');
  Workbook.UnregisterGlobalUserFunction('FISCALYEAR');
end;

IXLSWorkbook, TXLSWorkbook e TXLSXWorkbook espongono RegisterUserFunction, UnregisterUserFunction, ClearUserFunctions, RegisteredUserFunctionCount, RegisterGlobalUserFunction, UnregisterGlobalUserFunction, ClearGlobalUserFunctions e RegisteredGlobalUserFunctionCount

I punti di ingresso equivalenti a livello di unità sono XLSRegisterGlobalUserFunction, XLSUnregisterGlobalUserFunction, XLSClearGlobalUserFunctions, XLSRegisteredGlobalUserFunctionCount e XLSGlobalUserFunctionRegistered

TXLSCalculator.OnUserFunctionResolve partecipa prima del fallback dell'evento legacy e i gestori del registro vengono invocati al di fuori del blocco del registro, così un gestore può annullare la propria registrazione in modo sicuro

I nomi di funzione esterni e in stile macro pericolosi vengono bloccati prima della valutazione degli argomenti e della ricerca del gestore, a meno che AllowUnsafeFormulaCallbacks non sia abilitato esplicitamente per la cartella di lavoro o per la singola valutazione contestuale; i normali nomi di funzioni utente restano disponibili per default

Diagnostica delle formule

TXLSXFormulaIssueKind, TXLSXFormulaLocation e TXLSXFormulaIssue vengono restituiti da TXLSXWorkbook.AnalyzeFormulaIssues per funzioni mancanti, riferimenti esterni e componenti di riferimenti circolari

Ispezione dei fogli macro

TXLSSheetKind distingue foglio di lavoro, foglio macro, foglio grafico, modulo VBA e record di foglio sconosciuti tramite TXLSWorksheet.SheetKind; TXLSMacroRisk, TXLSMacroCommandInfo e TXLSMacroCommandArray descrivono i risultati tipizzati di TXLSWorksheet.ScanMacroCommands

Tipi AutoFit unificati e di ordinamento

TXLSMergedAutoFitStrategy e TXLSXMergedAutoFitStrategy scelgono la crescita per primo, ultimo o bilanciata per gli intervalli uniti, mentre TXLSSortOrientation, TXLSSortFormulaMode e TXLSSortCompareEvent controllano l'ordinamento stabile verticale o orizzontale e lo spostamento delle formule

Vedere anche