Klassinen XLS ja XLSX paljastavat saman sivuvaikutuksettoman sopimuksen kaavasyötön luokittelemiseen ennen kuin kutsuja muuttaa solua
Yhteinen käytäntö
TXLSFormulaEmptyStringMode =
(xlfesmClearCell, xlfesmPreserveString);
TXLSFormulaUnknownSymbolMode =
(xlfusmReject, xlfusmPreserve);
TXLSFormulaEntryPolicy = record
EmptyStringMode: TXLSFormulaEmptyStringMode;
UnknownFunctionMode: TXLSFormulaUnknownSymbolMode;
UnknownNameMode: TXLSFormulaUnknownSymbolMode;
end;
property FormulaEntryPolicy: TXLSFormulaEntryPolicy;
Klassinen IXLSWorkbook ja TXLSWorkbook paljastavat ominaisuuden yhdessä TXLSXWorkbook-luokan kanssa; XLSDefaultFormulaEntryPolicy tyhjentää tyhjän syötön ja hylkää tuntemattomat funktiot sekä tuntemattomat määritellyt nimet
Työkirjan ominaisuus kopioidaan arvona ja se vahvistetaan atomisesti osoitettaessa, jolloin tukemattomat luettelointiarvot nostavat EArgumentOutOfRangeException-poikkeuksen muuttamatta aiempaa käytäntöä
Vahvistuksen tulos
function ValidateFormulaEntry(Row, Col: Integer;
const Formula: WideString): TXLSFormulaEntryValidationResult;
TXLSFormulaEntryValidationResult = record
Issue: TXLSFormulaEntryIssue;
Action: TXLSFormulaEntryAction;
Symbol: WideString;
end;
Issue erottaa virheen puuttumisen, tuntemattoman funktion, tuntemattoman nimen, syntaksivirheen, kohdemuodon rajoituksen ja virheelliset kohdekoordinaatit
Action valitsee solun tyhjennyksen, merkkijonon tallennuksen, kaavan tallennuksen tai hylkäämisen, ja Symbol tunnistaa tuntemattoman funktion tai nimen, kun jompikumpi on havaittu
Tyhjä teksti ja kaavat
Täsmälleen tyhjä syöto palauttaa xlfeaClearCell- tai xlfeaStoreString-tuloksen EmptyStringMode-arvon mukaisesti
Kaava, joka palauttaa tyhjän merkkijonon, kuten ="", säilyy kaavana ja palauttaa xlfeaStoreFormula-tuloksen, kun kohdemuoto pystyy esittämään sen
Kaavateksti voi sisältää tai jättää pois yksittäisen alussa olevan yhtäsuuruusmerkin
Täsmälleen tyhjän merkkijonon osoittaminen klassisen XLS:n tai XLSX:n solun tavallisen Value-ominaisuuden kautta soveltaa nyt tätä tilaa suoraan: oletus poistaa olemassa olevan arvon tai kaavan, ja xlfesmPreserveString korvaa solun sisällön nollan pituisella vakiomerkkijonolla
Null ja Unassigned tyhjentävät solun aina kummassakin tilassa, kun taas oikea kaava, kuten ="", säilyy kaavana, jolla on itsenäisesti tallennettu tai laskettu tyhjän merkkijonon tulos
XLSX:n string- ja Variant-tyyppisten rivien tai sarakkeiden kirjoittimet soveltavat samaa sääntöä tyhjennettyjä aukkoja toteuttamatta ja säilyttävät paketoidun tallennuksen silloin, kun jäljellä olevat arvot ovat siinä esitettävissä
Natiivit XLS-, XLSX- ja ODS-lukijat sekä XLS-to-XLSX- ja XLSX-to-XLS-muuntimet käsittelevät tallennettuja arvoja luotettuina syötteinä, joten tiedostotason vakio tyhjä merkkijono säilyy, vaikka kohdetyökirja pitäisi kiinni oletusarvoisesta käyttäjäsyötön käytännöstä
Tuntemattomat symbolit ja kohdemuodot
Rekisteröidyt työkirja- tai prosessitason käyttäjäfunktiot sekä osoitetut OnUserFunction- tai OnUserFunctionEx-takaisinkutsut katsotaan tunnetuiksi vahvistuksen aikana kutsumatta käsittelijää, ja rekisteröimättömät kutsut säilyttävät oman funktionimensä Symbol-arvossa
Tiukka tila palauttaa xlfeaReject-tuloksen tuntemattomille funktioille tai nimille; osoittaminen solun tavallisen Formula-ominaisuuden kautta hylkää ennen arvon, kaavojen välimuistin tai riippuvuuksien muuttamista
Säilytystila pitää diagnostiikan ja tallentaa kaavan solun tavallisen API:n kautta; klassinen XLS sarjoi tuntemattoman kutsun BIFF-lisäosien käyttäjäfunktiotokenien avulla ja säilyttää tuntemattoman nimen tekstin tallennuksen, uudelleenavaamisen ja XLS/XLSX-muunnoksen yli
Klassinen XLS kokoaa lisäksi tunnetut kaavat BIFF-kirjoittimen kautta ja palauttaa xlfeiTargetFormatUnsupported-tuloksen, kun lauseketta ei voi esittää, kun taas XLSX hyväksyy tunnetut modernit kaavafunktiot, joita sen kaavamalli tukee
XLSX:n vahvistus tunnistaa LAMBDA-funktion, leksikaaliset LET-kutsuttavat, lambdoihin viittaavat määritellyt nimet, raporttien paikkamerkit, rekisteröidyt työkirjojen ulkoiset linkit sekä kelvolliset kvalifioidut tai kvalifioimattomat rakenteiset viittaukset mukaan lukien sisäkkäiset ja nykyisen rivin muodot
Yhteensopivuustila voi lisäksi säilyttää ratkaisemattomia ulkoisia rakenteisia viittauksia myöhempää käsittelyä varten, kun taas tiukka tila hylkää edelleen ratkaisemattomat taulukoiden nimet
Laskenta ja massatarkastus
Säilytetty tuntematon funktio, joka jää käsittelemättä lambdoille ja käyttäjäfunktioille tehdyssä jakelussa, tai säilytetty tuntematon nimi evaluoituu Variant-virheenä koodilla $1D, Excelin #NAME?-virheenä; sama tyypitetty virhe etenee riippuvien kaavojen ja kontekstuaalisen evaluoinnin kautta
Tunnetut toteuttamattomat sisäänrakennetut funktiot pysyvät erottuvina tuntemattomasta kutsusta, kun taas käyttäjäfunktion työkirja- tai prosessitasolla rekisteröinti, korvaaminen, poistaminen tai tyhjentäminen sekä määritellyn nimen kaavan muuttaminen mitätöivät vanhentuneen riippuvuus- ja laskentatilan
function AuditFormulaSymbols: TXLSFormulaSymbolIssues; overload;
function AuditFormulaSymbols(
out AStats: TXLSFormulaSymbolAuditStats):
TXLSFormulaSymbolIssues; overload;
TXLSWorkbook ja TXLSXWorkbook tarjoavat samat massatarkastuksen ylikuormitukset; jokainen ongelma tunnistaa tuntemattoman funktion, tuntemattoman nimen tai syntaksivirheen yhdessä joko laskentataulukon solun sijainnin (LocationKind = xlfslCell) tai määritellyn nimen sijainnin (LocationKind = xlfslDefinedName) kanssa sekä lähdekaavan ja ratkaisemattoman symbolin
Tarkastus kulkee jäsenneltyjen kaavapuiden tai tallennettujen BIFF-tunnusten kautta tekstin selaamisen sijaan, joten merkkijonon sisällä olevaa funktiomaista tekstiä ei raportoida; XLSX:n kokoaminen käyttää operaatiokohtaista välimuistia, jonka avaimia ovat ratkaistu kaavateksti, laskentataulukko, kieliasetukset, määriteltyjen nimien sukupolvi, käyttäjäfunktiorekisterin sukupolvet ja takaisinkutsujen saatavuus
EntryCount raportoi tarkastetut kaavat, UniqueFormulaCount itsenäisesti kootut tai tarkastetut kaavat ja CacheHitCount toistuvat merkinnät, jotka operaation välimuisti palveli
Ei muutoksia laskentataulukkoon
Vahvistus ei luo eikä muokkaa solua, ei muuta välimuistissa olevia arvoja, ei päivitä riippuvuusgraafia, ei merkitse työkirjaa muuttuneeksi eikä kutsu rekisteröityä käyttäjäfunktion käsittelijää
Suora vahvistus pysyy muutoksettomana; tavallinen kaavan osoittaminen soveltaa saman päätöksen sisäisesti ja toteutuu vasta, kun vahvistus ja kohdemuodon valmistelu onnistuvat
Delphi-esimerkki
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);
Katso myös