HotXLS-dokumentasjon

SaveSemanticSnapshot- og ComputeSemanticHash-metoder

Skriver en versjonert kanonisk representasjon av arbeidsbokens semantikk til en strøm, eller beregner SHA-256 av nøyaktig de bytene

Syntaks

procedure SaveSemanticSnapshot(AStream: TStream); overload;
procedure SaveSemanticSnapshot(AStream: TStream;
  AProfile: TXLSSemanticSnapshotProfile;
  AOptions: TXLSSemanticSnapshotOptions); overload;

function ComputeSemanticHash: WideString; overload;
function ComputeSemanticHash(
  AProfile: TXLSSemanticSnapshotProfile;
  AOptions: TXLSSemanticSnapshotOptions): WideString; overload;

Metodene eksponeres av Classic IXLSWorkbook og TXLSWorkbook i lxHandle og av TXLSXWorkbook i lxHandleX

Profil- og valgtypene er deklarert i lxSemanticSnapshot og er synlige gjennom begge arbeidsbokenhetene

Profiler

VerdiBetydning
xlsspContentKanonisk arbeidsbokinnhold egnet for vanlige kontroller av semantisk identitet
xlsspSecurityCompleteInnholdet pluss støttet ugjennomsiktig sikkerhets- og bevaringstilstand som bevisst er utelatt fra vanlig innholdsidentitet

Valg

VerdiInkludert tilstand
xlssoIncludeViewerStateUtvalg, aktiv visningstilstand og annen støttet visningsrettet tilstand
xlssoIncludeVolatileMetadataStøttede tidsstempler, produsentmetadata og andre bevisst flyktige felt
xlssoIncludeFormulaCachedResultsLagrede formelresultater og støttede eksterne koblingsbuffere uten ny beregning eller ekstern I/U

Valgsettet har type TXLSSemanticSnapshotOptions = set of TXLSSemanticSnapshotOption. Overbelastningene uten parametere bruker xlsspContent med et tomt valgsett

Regler for strøm og identitet

Samtidighet og feil

Begge metodene holder et leselån på arbeidsboken gjennom hele gjennomløpet

En samtidig offentlig mutasjon mislykkes før arbeidsboktilstanden endres, med EXLSWorkbookWriteGuardUnavailable, mens en oppdaget generasjonsendring eller en ustøttet tvetydig semantisk struktur utløser EXLSSemanticSnapshot

Delphi-eksempel

var
  Snapshot: TFileStream;
  Hash: WideString;
begin
  Snapshot:= TFileStream.Create('workbook.semantic', fmCreate);
  try
    Workbook.SaveSemanticSnapshot(Snapshot,
      xlsspSecurityComplete,
      [xlssoIncludeFormulaCachedResults]);
  finally
    Snapshot.Free;
  end;

  Hash:= Workbook.ComputeSemanticHash;

C++Builder-eksempel

TFileStream *snapshot = new TFileStream(
  L"workbook.semantic", fmCreate);
try
{
  workbook->SaveSemanticSnapshot(snapshot);
}
__finally
{
  delete snapshot;
}

WideString hash = workbook->ComputeSemanticHash();

Snapshot-modellreferanse

Snapshot-motoren er ikke bundet til arbeidsbokobjekter: alt nedenfor er deklarert i lxSemanticSnapshot, og arbeidsbokmetodene er tynne innpakninger over de samme globale inngangspunktene

Utvidelsesgrensesnitt

Implementer IXLSSemanticWorkbookSource for å skrive ut eller hashe et snapshot av enhver kilde, og valgfritt IXLSSemanticFormulaResolver slik at utskrevne formler bærer oppløst informasjon om eksterne referanser og definerte navn

IXLSSemanticWorkbookSource = interface
  procedure WriteCommon(AWriter: TXLSSemanticCanonicalWriter);
end;

IXLSSemanticFormulaResolver = interface
  function ResolveFormulaReference(AExternID: Integer;
    out AInfo: TXLSSemanticFormulaReferenceInfo): Boolean;
  function ResolveFormulaName(ANameID, AExternID: Integer;
    out AInfo: TXLSSemanticFormulaNameInfo): Boolean;
end;

TXLSSemanticFormulaReferenceInfo = record
  LinkKind: TXLSSemanticFormulaLinkKind;
  BookName: WideString;
  FirstSheetName: WideString;
  LastSheetName: WideString;
end;

TXLSSemanticFormulaNameInfo = record
  NameKind: TXLSSemanticFormulaNameKind;
  LinkKind: TXLSSemanticFormulaLinkKind;
  Name: WideString;
  ScopeSheetName: WideString;
  BookName: WideString;
end;

Inne i WriteCommon er writeren et ugjennomsiktig håndtak: ikke kall dets primitive metoder — BeginContainer / EndContainer rammer en tagget beholder, og WriteNull, WriteBoolean, WriteUInt32, WriteUInt64, WriteInt32, WriteInt64, WriteBinary64, WriteWideString og WriteBytes koder hver nøyaktig én kanonisk primitiv, med Finish som forsegler strømmen og Finished som rapporterer fullføring — send den tilbake til utdata-hjelpefunksjonene nedenfor, slik at hver produsent skriver identiske bytes

Globale inngangspunkter

procedure XLSSaveSemanticSnapshot(AStream: TStream;
  const ASource: IXLSSemanticWorkbookSource;
  AProfile: TXLSSemanticSnapshotProfile;
  AOptions: TXLSSemanticSnapshotOptions);
function XLSComputeSemanticHash(
  const ASource: IXLSSemanticWorkbookSource;
  AProfile: TXLSSemanticSnapshotProfile;
  AOptions: TXLSSemanticSnapshotOptions): WideString;
procedure XLSInitializeSemanticCellStyle(out AStyle: TXLSSemanticCellStyle);
function XLSBuiltinSemanticNumberFormat(AId: Word): WideString;

XLSInitializeSemanticCellStyle fyller en stilpost med de kanoniske standardverdiene før individuelle felt redigeres; XLSBuiltinSemanticNumberFormat mapper en innebygd tallformat-id (under 164) til formatstrengen sin, som forbrukere trenger for å tolke utskrevne stiler og dekodede strømmer

Modellvokabular

GruppeTyper
ArkTXLSSemanticSheetKind (regneark, makro, diagram, VBA, ukjent), TXLSSemanticSheetVisibility (synlig, skjult, svært skjult), TXLSSemanticDefinedNameScope (arbeidsbok eller regneark), TXLSSemanticRange / TXLSSemanticRanges (rektangulære områder brukt av sammenslåinger, betinget formatering og tabeller)
CelleTXLSSemanticCellKind (tom, tall, dato/klokkeslett, tekst, boolsk, feil, formel)
StilTXLSSemanticCellStyle (komplett kanonisk celstil), TXLSSemanticColor med TXLSSemanticColorKind (ingen, automatisk, system, ARGB, tema, indeksert) og en tint, TXLSSemanticBorderEdge / TXLSSemanticBorderStyle, TXLSSemanticFillPattern, TXLSSemanticGradientKind / TXLSSemanticGradientStop / TXLSSemanticGradientStops, TXLSSemanticUnderline, TXLSSemanticFontVerticalAlign
FormelTXLSSemanticFormulaEncoding (parselt tre mot ugjennomsiktig tekst), TXLSSemanticFormulaArrayKind (ingen, CSE, dynamisk), TXLSSemanticFormulaNodeKind, TXLSSemanticFormulaRangeKind, TXLSSemanticFormulaLinkKind (samme ark, intern, ekstern, tillegg, DDE, OLE, annet), TXLSSemanticFormulaNameKind
Tegninger og diagrammerTXLSSemanticDrawingKind (bilde, tekstboks, diagram, gruppe, skjemakontroll), TXLSSemanticDrawingAnchorMode (flytt og skalér, bare flytt, absolutt), TXLSSemanticImageFormat, TXLSSemanticChartFamily

Hjelpefunksjoner for utdata

Disse globale rutinene skriver ett modellfragment inn i writeren som sendes til WriteCommon: XLSWriteSemanticLiteralCell, XLSWriteSemanticCellStyle, XLSWriteSemanticColor, XLSWriteSemanticRanges, XLSWriteSemanticMerge, XLSWriteSemanticAxisEntry, XLSWriteSemanticFormulaTree, XLSWriteSemanticFormulaDefinition og XLSWriteSemanticFormulaCell (formelceller bærer matarisegrenser og et valgfritt bufret resultat). XLSWriteSemanticWorkbookCommon åpner arbeidsbokbeholderen og kaller WriteCommon, som egendefinerte kilder normalt kaller først

Se også

grensesnitt IXLSWorkbook · klasse TXLSXWorkbook · CreateReadOnlyView-metode