HotXLS-dokumentation

Politik for validering af formelindtastning

Klassiske XLS og XLSX eksponerer den samme kontrakt uden bivirkninger til klassificering af formelinput, før en kalder ændrer en celle

Fælles politik

TXLSFormulaEmptyStringMode =
  (xlfesmClearCell, xlfesmPreserveString);
TXLSFormulaUnknownSymbolMode =
  (xlfusmReject, xlfusmPreserve);

TXLSFormulaEntryPolicy = record
  EmptyStringMode: TXLSFormulaEmptyStringMode;
  UnknownFunctionMode: TXLSFormulaUnknownSymbolMode;
  UnknownNameMode: TXLSFormulaUnknownSymbolMode;
end;

property FormulaEntryPolicy: TXLSFormulaEntryPolicy;
Klassiske IXLSWorkbook og TXLSWorkbook eksponerer egenskaben sammen med TXLSXWorkbook; XLSDefaultFormulaEntryPolicy rydder tomt input og afviser ukendte funktioner og ukendte definerede navne
Projektmappens egenskab kopieres efter værdi og valideres atomært ved tildeling, så ikke-understøttede opregningsværdier rejser EArgumentOutOfRangeException uden at ændre den tidligere politik

Valideringsresultat

function ValidateFormulaEntry(Row, Col: Integer;
  const Formula: WideString): TXLSFormulaEntryValidationResult;

TXLSFormulaEntryValidationResult = record
  Issue: TXLSFormulaEntryIssue;
  Action: TXLSFormulaEntryAction;
  Symbol: WideString;
end;
Issue skelner mellem fravær af fejl, ukendt funktion, ukendt navn, syntaksfejl, målformatbegrænsning og ugyldige målkoordinater
Action vælger rydning af celle, lagring af streng, lagring af formel eller afvisning, mens Symbol identificerer en ukendt funktion eller et ukendt navn, når et af dem er blevet genkendt

Tom tekst og formler

Input, der er helt tomt, returnerer xlfeaClearCell eller xlfeaStoreString i henhold til EmptyStringMode
En formel, der returnerer en tom streng, som ="", forbliver en formel og returnerer xlfeaStoreFormula, når målformatet kan repræsentere den
Formelteksten kan indeholde eller udelade ét indledende lighedstegn
Tildeling af en helt tom streng via den normale Classic XLS- eller XLSX-celles Value-egenskab anvender nu denne tilstand direkte: standarden fjerner enhver eksisterende værdi eller formel, mens xlfesmPreserveString erstatter celleindholdet med en konstant streng, hvis længde er nul
Null og Unassigned rydder altid cellen i begge tilstande, mens en reel formel som ="" forbliver en formel med et uafhængigt lagret eller beregnet resultat af en tom streng
XLSX-række- eller kolonneskrivere for string og Variant anvender samme regel uden at materialisere ryddede huller og bevarer den pakkede lagring, så længe de resterende værdier kan repræsenteres der
Indbyggede XLS-, XLSX- og ODS-læsere samt XLS-to-XLSX- eller XLSX-to-XLS-konvertere behandler lagrede værdier som betroet input, så en konstant tom streng på filniveau overlever, selv når destinationsprojektmappen bevarer standardpolitikken for brugerindtastning

Ukendte symboler og målformater

Registrerede brugerfunktioner på projektmappe- eller procesniveau og tildelte OnUserFunction- eller OnUserFunctionEx-callbacks regnes som kendte under valideringen uden at kalde en handler, mens uregistrerede kald bevarer deres funktionsnavn i Symbol
Streng tilstand returnerer xlfeaReject for ukendte funktioner eller navne; tildeling via cellens normale Formula-egenskab afviser, før værdien, formelcachen eller afhængighederne ændres
Bevaringstilstand bevarer diagnosticeringen og gemmer formlen via cellens normale API; Classic XLS serialiserer et ukendt kald via BIFF-tokens til add-in-brugerfunktioner og bevarer teksten for det ukendte navn gennem lagring, genåbning og XLS/XLSX-konvertering
Classic XLS kompilerer derudover kendte formler via BIFF-skriveren og returnerer xlfeiTargetFormatUnsupported, når udtrykket ikke kan repræsenteres, mens XLSX accepterer kendte moderne formelfunktioner, som dets formelmodel understøtter
XLSX-validering genkender LAMBDA, leksikale kaldelige LET-former, definerede navne, der henviser til lambdaer, rapportpladsholdere, registrerede eksterne projektmappelinks og gyldne kvalificerede eller ukvalificerede strukturerede referencer, herunder indlejrede former og former for den aktuelle række
Kompatibilitetstilstand kan også bevare uopløste eksterne strukturerede referencer til senere behandling, mens streng tilstand stadig afviser uopløste tabelnavne

Beregning og massekontrol

En bevaret ukendt funktion, der forbliver uhåndteret efter dispatch til lambdaer og brugerfunktioner, eller et bevaret ukendt navn, evalueres som en Variant-fejl med koden $1D, Excels #NAME?-fejl; samme typede fejl udbreder sig gennem afhængige formler og kontekstuel evaluering
Kendte indbyggede funktioner uden implementering forbliver adskilt fra et ukendt kald, mens registrering, erstatning, fjernelse eller rydning af en brugerfunktion på projektmappe- eller procesniveau og ændring af et defineret navns formel ugyldiggør forældet afhængigheds- og beregningstilstand
function AuditFormulaSymbols: TXLSFormulaSymbolIssues; overload;
function AuditFormulaSymbols(
  out AStats: TXLSFormulaSymbolAuditStats):
  TXLSFormulaSymbolIssues; overload;
TXLSWorkbook og TXLSXWorkbook leverer de samme massekontrol-overloads; hvert problem identificerer en ukendt funktion, et ukendt navn eller en syntaksfejl sammen med enten en celleplacering på regnearket eller en placering af et defineret navn, kildeformlen og det uopløste symbol
Kontrollen gennemløber parsede formeltræer eller lagrede BIFF-tokens i stedet for at skanne tekst, så funktionel tekst inde i en streng ikke rapporteres; XLSX-kompilering bruger en cache lokal til operationen med nøgler af den opløste formeltekst, regnearket, landestandarden, generationen af definerede navne, generationerne af brugerfunktionsregisteret og callbacks tilgængelighed
EntryCount rapporterer kontrollerede formler, UniqueFormulaCount formler, der er kompileret eller inspiceret uafhængigt, og CacheHitCount gentagne poster, der er leveret fra operationens cache

Ingen mutation af regnearket

Validering opretter eller redigerer ikke en celle, ændrer ikke cachade værdier, opdaterer ikke afhængighedsgrafen, markerer ikke projektmappen som ændret og kalder ikke en registreret brugerfunktions-handler
Direkte validering forbliver mutationsfri; normal formeltildeling anvender samme beslutning internt og gennemfører først, efter at validering og forberedelse af målformatet er lykkedes

Delphi-eksempel

Policy := Workbook.FormulaEntryPolicy;
Policy.UnknownFunctionMode := xlfusmReject;
Policy.UnknownNameMode := xlfusmReject;
Workbook.FormulaEntryPolicy := Policy;

Validation := Sheet.ValidateFormulaEntry(4, 2, FormulaText);
if Validation.Action = xlfeaStoreFormula then
  Sheet.Cells[4, 2].Formula := FormulaText;

Issues := Workbook.AuditFormulaSymbols(Stats);
for I := 0 to High(Issues) do
  if Issues[I].Kind = xlfsiUnknownFunction then
    LogUnknownSymbol(Issues[I].Symbol);

Se også

Formelevaluering i kontekst
Excel-beregningsemaskine
Yderligere klassiske XLS-API-medlemmer
Avancerede XLSX-API-medlemmer