Eksterne arbeidsbokreferanser
Oversikt
Regnearkmodeller henter ofte data fra sekundære arbeidsbøker via kryssreferanseformler; HotXLS støtter tolkning, skriving og bevaring av eksterne arbeidsbokreferanser i både BIFF8 (klassisk XLS)- og OpenXML (XLSX)-dokumenter
Arbeidsområde for live-arbeidsbøker
TXLSWorkbookWorkspace i lxWorkbookWorkspace er den felles identitets- og registreringskjernen for live eksterne arbeidsbøker; både TXLSWorkbook og TXLSXWorkbook eksponerer CreateWorkspaceWorkbook og eier en ExternalWorkspace som formelsevaluatorerne deres bruker, mens en ODS-arbeidsbok som åpnes via TXLSXWorkbook rapporterer OpenDocument-motortypen gjennom samme adapter
var
Host, Target: TXLSXWorkbook;
begin
Host.ExternalWorkspace.Add(
'..\Data\Target.xlsx',
'..\Data\Target.xlsx',
'C:\Models\Host.xlsx',
Target.CreateWorkspaceWorkbook);
// The compatibility facade maps an unambiguous name to the
// relationship target already stored in Host.ExternalLinks
Host.RegisterExternalWorkbook('Target.xlsx', Target);
// The matching call revokes a facade-level registration
Host.UnregisterExternalWorkbook('Target.xlsx');
end;
Klassiske arbeidsbøker bruker de samme kompatibilitetsmetodene med TXLSWorkbook-mål; RegisterExternalWorkbook og UnregisterExternalWorkbook styrer bare navntilordningen på facadenivå, mens ExternalWorkspace.Remove og Clear trekker tilbake selve arbeidsområderegistreringene. Kall på tvers av motorer legger til en hvilken som helst Classic-, XLSX- eller ODS-adapter direkte i ExternalWorkspace
- Identitetsnormalisering er leksikalsk og skiller ikke mellom store og små bokstaver, bevarer stier og filendelser, løser relative mål opp mot eierens kildeidentitet, kollapser punktsegmenter og utfører ingen filsystem- eller nettverkstilgang
- Eksakte identiteter og eksplisitte aliaser løses først; oppslag bare på basenavn lykkes bare når nøyaktig én tilkoblet registrering matcher, ellers returnerer
ResolvexlswrsConflict Addavviser kollisjoner i eksakt nøkkel, alias og duplikat-arbeidsbok; ulike fullstendige stier og ulike filendelser kan eksistere side om sideRemoveogCleartrekker tilbake registreringer, mens direkte destruksjon av et Classic- eller XLSX-mål kobler fra adapteren og venter på aktive lesere før modellen frigis- Eksterne regneark løses etter deklarert navn før den én-baserte posisjonelle reserveløsningen, så arkrekkefølgen i målarbeidsboken trenger ikke å samsvare med kildens koblingskatalog
- Formelsevaluatoren leser en løst live-arbeidsbok først og faller deretter tilbake på vertsfilens typede buffer; Classic XLS-verter dekoder sparsome XCT- og CRN-verdier, mens XLSX-verter bruker bufferen for eksterne koblinger som pakkemodellen allerede holder
OnLoadWorkbooker en valgfri, kontrollert ressursforespørsel; standardverdien ernil, så rekalkulering utfører fortsatt ingen filsystem- eller nettverkstilgang med mindre programkode eksplisitt tilbyr den policyen- Hver normaliserte identitet aktiverer loaderen høyst én gang frem til
ResetLoadAttempts; samtidige topplivåsforespørsler deler resultatet som er underveis, inkludert typede ikke-funnet- og feilutfall, i stedet for å åpne den samme ressursen gjentatte ganger MaxLoadDepthhar standardverdi 16 ogMaxWorkbookCountstandardverdi 64; re-inngang med samme identitet, nestede avhengigheter til en identitet som allerede er under behandling, oppbrukt dybde og oppbrukt arbeidsbokantall returnerer typede diagnostikker uten å blokkere i en lastsiklus- Eksterne kilde-IRI-er i ODF forblir komplette leksikalske identiteter, inkludert URI-skjemaer og siterte tegn, men autoriserer aldri implisitt fil- eller nettverkstilgang
- En identitetskonflikt forblir
#REF!slik at foreldede bufrede data ikke kan skjule tvetydig ruting; en fraværende bufret celle er en tom verdi bare når filen deklarerer en gyldig buffer for det arket
Resolve utfører registrert oppslag og deretter den valgfrie kontrollerte lastingen; utfallet er en TXLSWorkspaceResolveStatus (xlswrsResolved, xlswrsNotFound, xlswrsConflict, xlswrsDisconnected, xlswrsLoadNotFound, xlswrsLoadLimit, xlswrsLoadLoop eller xlswrsLoadError), og ResolveWithLoader returnerer i tillegg en TXLSWorkspaceLoadDiagnostic som parer en TXLSWorkspaceLoadDiagnosticCode med en TXLSWorkspaceLoadResponseStatus (xlswlrsNotFound, xlswlrsResolved, xlswlrsError) for å skille utfallene ikke funnet, loaderfeil, frakoblet resultat, dybde- eller arbeidsbokgrense, identitetsre-inngang, samtidig avhengighet og registreringskonflikt. Loader-callbacken mottar en TXLSWorkspaceLoadRequest (identitet, dybde, registrert antall, grenser) og svarer med en TXLSWorkspaceLoadResponse
Recalculate rapporterer en TXLSWorkspaceRecalcStatus, valgfritt med en TXLSWorkspaceRecalcResult-nedbrytning, og evaluatoren registrerer proveniens per celle som en TXLSWorkspaceRuntimeLookup (xlswrlInactive, xlswrlResolved, xlswrlFallbackCache eller xlswrlError) slik at diagnostikk kan skille en live-lesing fra en bufret reserveløsning
Adapteren IXLSWorkspaceWorkbook eksponerer EngineKind (type TXLSWorkspaceEngineKind: xlsweClassic, xlsweOpenXml eller xlsweOpenDocument), SourceIdentity, InstanceIdentity og Generation, tester liv med IsConnected, leser én celle via TryGetCellValue (som returnerer en typet TXLSWorkspaceCellStatus med verdi, mangler, ugyldig referanse, frakoblet eller feil, pluss et flagg for utenfor brukt område), oppfrisker modellen med Recalculate og kobler fra arbeidsbokmodellen med Disconnect
Registeret legger til AddAlias for ekstra navn bundet til én registrert identitet, TryResolve som unntagsfri oppslagsvariant, og BaseNameMatchCount for å forhåndsvise hvor mange tilkoblede registreringer som deler et basenavn før man velger et entydig mål
Avhengighetsgraf på tvers av arbeidsbøker
BuildDependencyGraph tar et øyeblikksbilde av alle registrerte arbeidsbokadaptere og henter formelnoder fra Classic XLS-, XLSX- og ODS-modeller inn i én TXLSWorkspaceDepGraph; metoden returnerer False og ingen delgraf hvis noen registrert adapter ikke kan levere avhengighetsmetadata
- Hver formelnode beholder sin kanoniske arbeidsbokidentitet, regnearknavn og én-baserte regnearkposisjon, nullbasert celleposisjon, matriseutdatarektangel, volatilitet og tilstand for uløste referanser
- Celle- og rektangulære områdereferanser beholder kanoniske mål-arbeidsbok- og regnearkidentiteter; helkolonne-, helrad- og fullarkreferanser forblir ett intervall i stedet for å ekspandere til millioner av celler
- Lokale definerte navn forblir spørbare som symbolske avhengigheter og ekspanderer også til sine konkrete celle- eller områdeavhengigheter når definisjonen kan løses statisk
- Eksterne definerte navn bevarer plassen for ekstern kobling, deklarert navn, valgfritt regnearkomfang og kanonisk målidentitet uten å behandle DDE-, OLE- eller brukerfunksjonsmetadata som arbeidsboknavn
FindDependentsOfCellog oppbyggingen av grafkanter bruker radintervalltrær med beskjæring på maksimalende;LastRangeCandidateChecksogEdgeCandidateCheckseksponerer antallet nøyaktige rektangelsjekker for ytelsesverifisering- Formelekstraksjon kjører under arbeidsbokens leseleaser og skanner bare materialiserte formelobjekter, så pakket verdilagring forblir pakket, og oppretting av grafen endrer ikke arbeidsbokgenerasjoner
Planlagt rekalkulering
Recalculate beholder den delte grafen og bygger den opp igjen bare når arbeidsområderegistreringen eller en arbeidsboks generering for formelavhengigheter endres; nye verdigenereringer setter i gang et nytt dirty-pass, og skitten tilstand propagerer gjennom de avhengige kantene mellom arbeidsbøker
var
RecalcInfo: TXLSWorkspaceRecalcResult;
Status: TXLSWorkspaceRecalcStatus;
begin
Status := Workspace.Recalculate(RecalcInfo);
if Status <> xlswrcOk then
HandleWorkspaceCalculation(Status, RecalcInfo);
end;
- Sterkt sammenhengende komponenter beregnes på formelceller, slik at arbeidsbøker kan lenke i begge retninger og likevel være syklisfrie når cellesivå-avhengighetsstiene deres ikke danner en løkke
- Ekte sykkelmedlemmer og skitne etterkommere som blokkeres av en sykkel, ugyldiggjøres og holdes utenfor den topologiske rekkefølgen, slik at foreldede bufrede verdier ikke presenteres som vellykkede resultater
- Volatile eller statisk uløste referanser tvinger frem den konservative dirty-atferden som kreves for korrekthet, mens stabile grafer gjenbruker tidligere avhengighetsarbeid
- Eksterne lesinger innenfor et pass bruker en eksakt buffer for arbeidsbokinstans, regneark, rad og kolonne; en planlagt formel ugyldiggjør sitt utdataområde før evalueringen, slik at senere avhengige ser den nye verdien
- Passlokal buffer gir aldri ressursmyndighet; registrerte arbeidsbøker og den valgfrie, kallestyrte loaderen forblir de eneste live-kildene for oppløsning, etterfulgt av typede filbuffere og
#REF! TXLSWorkspaceRecalcResulteksponerer om grafen ble bygget opp igjen, pluss tellere for skitne, evaluerte, ugyldiggjorte, sykler, blokkerte, samt treff og bom i bufferen- Statusen skiller mellom suksess, ustøttede adaptere, frakoblede arbeidsbøker, sirkulære referanser, beregningsfeil og mutering av arbeidsområdet under passet
- Kall til
Recalculatepå det samme arbeidsområdet serialiseres, så to beregningsøkter endrer aldri den delte grafen eller arbeidsbokbufferne samtidig RemoveellerClearkan kjøre mens et pass er aktivt; passet beholder trygge adaptersnapshots og returnererxlswrcWorkspaceChangedi stedet for å dereferere en fjernet registrering- Å ødelegge et arbeidsområde venter på at det aktive passet fullføres, mens å ødelegge en registrert arbeidsbok kobler fra adapteren og gjør at senere oppløsning feiler trygt
- Loaderfeil og ikke-funnet-resultater forblir bufret én gang per normalisert identitet frem til
ResetLoadAttempts, og en mislykket beregning beholder lokal skitten tilstand for et eksplisitt nytt forsøk - Den beholdte grafen gjør et uendret oppfølgingspass proporsjonalt med antall registrerte arbeidsbøker i stedet for formelantallet; ikke-rekursiv komponentanalyse og kompakte områdekanter holder dype og brede modeller avgrenset av materialisert formelmetadata
Løsne eksterne definerte navn
ConvertExternalDefinedNamesToRefErrors tilbyr den samme offentlige operasjonen på TXLSWorkbook og TXLSXWorkbook; den returnerer antallet arbeidsbok- og regnearkomfangede definisjoner som er erstattet med nativ #REF!
var Converted: Integer; begin Converted := Workbook.ConvertExternalDefinedNamesToRefErrors; // External-link parts and ordinary cell formulas remain intact end;
- Utvalg i Classic XLS bruker kompilerte BIFF-referansetoken og XTI-identiteten til støttearbeidsboken, så tredimensjonale referanser innenfor samme arbeidsbok og usikre tokenstrømmer forblir uendret
- Utvalg i XLSX bruker syntaksbevisste, numeriske arbeidsbokspor i relasjonsdokumentenes rekkefølge og godtar bare eksterne koblingsdeler for arbeidsbok, og utelater DDE, OLE, uløste spor, tabellreferanser og klammerekst i strenger
- Alle erstatninger klargjøres før den første mutasjonen og committer som én skriveoperasjon; et annet kall er idempotent
- Navnetekst, arbeidsbok- eller regnearkomfang, synlighet, kommentarer, makro- og innebygde flagg, ukjente XLSX-attributter og katalogen for eksterne koblinger forblir tilgjengelige etter konvertering og round-trip
- Feilformede og ustøttede definisjoner forblir byte- eller tekstbevarende der det er mulig, og legger til
xlsDiagnosticDefinedNameConversionSkipped-diagnostikk i stedet for å bli gjettet - Avhengige formler rekalkuleres til den tilsvarende Excel-feilverdien, mens et gyldig bufret resultat for en vanlig direkte ekstern formel forblir tilgjengelig hvis den live arbeidsboken kobles fra senere
- Operasjonen er Excel-spesifikk og reinterpreterer ikke OpenDocument-semantikken for navneformler
Klassiske XLS-eksterne referanser
I klassiske XLS-arbeidsbøker lagres eksterne koblinger i den globale mappeblokken via EXTERNALBOOK- og EXTERNNAME-poster; HotXLS bevarer disse mappene under filens lese-/skrivesykluser og sikrer at fjernområdereferanser overlever endringsløkker
Eksterne XLSX-relasjoner
For OOXML-arbeidsbøker håndteres tilordning av eksterne koblinger via relasjonsdeler; se de støttende grensesnittdetaljene nedenfor
- Klassen TXLSXExternalLinks — API for å liste opp og oppdatere eksterne regnearkkoblinger
- Grensesnittet IXLSWorkbook — Arbeidsbokegenskaper på øverste nivå
- Egenskapen IXLSRange.Formula — Les og skriv formler på tvers av arbeidsbøker