HotXLS-dokumentation

SaveSemanticSnapshot- og ComputeSemanticHash-metoder

Streamer en versioneret, kanonisk repræsentation af projektbogens semantik eller beregner SHA-256 af præcis de bytes

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;

Metoderne eksponeres af Classic IXLSWorkbook og TXLSWorkbook i lxHandle og af TXLSXWorkbook i lxHandleX

Profil- og option-typerne er deklareret i lxSemanticSnapshot og er synlige via begge projektmappe-enheder

Profiler

VærdiBetydning
xlsspContentKanonisk projektmappeindhold, velegnet til almindelige tjek af semantisk identitet
xlsspSecurityCompleteIndhold plus understøttet uigennemsigtig sikkerheds- og bevaringstilstand, som bevidst er udeladt af den almindelige indholdsidentitet

Indstillinger

VærdiInkluderet tilstand
xlssoIncludeViewerStateMarkeringer, aktiv visningstilstand og anden understøttet fremvisertilstand
xlssoIncludeVolatileMetadataUnderstøttede tidsstempler, producentmetadata og andre bevidst volatile felter
xlssoIncludeFormulaCachedResultsGemte formelresultater og understøttede caches af eksterne links uden rekalkulering eller ekstern I/O

Optionsættet har typen TXLSSemanticSnapshotOptions = set of TXLSSemanticSnapshotOption. Overloadene uden parametre bruger xlsspContent med et tomt optionsæt

Strøm- og identitetsregler

Samtidighed og fejl

Begge metoder holder en læse-lease på projektmappen under hele gennemløbet

En samtidig offentlig mutation fejler, før projektbogens tilstand ændres, med EXLSWorkbookWriteGuardUnavailable, mens en detekteret generationsændring eller en ikke-understøttet, tvetydig semantisk struktur udlø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();

Reference for snapshotmodellen

Snapshot-motoren er ikke bundet til projektmappe-objekter: alt nedenfor er deklareret i lxSemanticSnapshot, og projektmappe-metoderne er tynde wrappere over de samme globale indgangspunkter

Udvidelsesinterfaces

Implementér IXLSSemanticWorkbookSource for at emitte eller hashe et snapshot af enhver kilde og valgfrit IXLSSemanticFormulaResolver, så de emmitterede formler bærer opløst information om eksterne referencer og definerede navne

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;

Inde i WriteCommon er writeren et uigennemsigtigt handle: kald ikke dens primitive metoder — BeginContainer / EndContainer indrammer en tagget beholder, og WriteNull, WriteBoolean, WriteUInt32, WriteUInt64, WriteInt32, WriteInt64, WriteBinary64, WriteWideString og WriteBytes encoder hver især én kanonisk primitiv, med Finish, der forsegler streamen, og Finished, der rapporterer fuldførelse — giv den tilbage til emissionshælperne nedenfor, så alle producenter emitterer identiske bytes

Globale indgangspunkter

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 udfylder en typografipost med de kanoniske standardværdier, før de enkelte felter redigeres; XLSBuiltinSemanticNumberFormat afbilleder et indbygget talformat-id (under 164) til dets formatstreng, hvilket forbrugere behøver for at fortolke emmitterede typografier og afkodede streams

Modelordforråd

GruppeTyper
ArkTXLSSemanticSheetKind (regneark, makro, diagram, VBA, ukendt), TXLSSemanticSheetVisibility (synlig, skjult, meget skjult), TXLSSemanticDefinedNameScope (projektmappe eller regneark), TXLSSemanticRange / TXLSSemanticRanges (rektangulære områder, brugt af fletninger, betingede formater og tabeller)
CelleTXLSSemanticCellKind (tom, tal, dato/klokkeslæt, tekst, boolesk, fejl, formel)
TypografiTXLSSemanticCellStyle (komplet kanonisk celletypografi), TXLSSemanticColor med TXLSSemanticColorKind (ingen, automatisk, system, ARGB, tema, indekseret) og en tint, TXLSSemanticBorderEdge / TXLSSemanticBorderStyle, TXLSSemanticFillPattern, TXLSSemanticGradientKind / TXLSSemanticGradientStop / TXLSSemanticGradientStops, TXLSSemanticUnderline, TXLSSemanticFontVerticalAlign
FormelTXLSSemanticFormulaEncoding (parset træ versus uigennemsigtig tekst), TXLSSemanticFormulaArrayKind (ingen, CSE, dynamisk), TXLSSemanticFormulaNodeKind, TXLSSemanticFormulaRangeKind, TXLSSemanticFormulaLinkKind (samme ark, intern, ekstern, add-in, DDE, OLE, andet), TXLSSemanticFormulaNameKind
Tegninger og diagrammerTXLSSemanticDrawingKind (billede, tekstboks, diagram, gruppe, formkontrolelement), TXLSSemanticDrawingAnchorMode (flyt og skalér, kun flyt, absolut), TXLSSemanticImageFormat, TXLSSemanticChartFamily

Emissionshjælpere

Disse globale rutiner skriver én modelfragt ind i den writer, der gives til WriteCommon: XLSWriteSemanticLiteralCell, XLSWriteSemanticCellStyle, XLSWriteSemanticColor, XLSWriteSemanticRanges, XLSWriteSemanticMerge, XLSWriteSemanticAxisEntry, XLSWriteSemanticFormulaTree, XLSWriteSemanticFormulaDefinition og XLSWriteSemanticFormulaCell (formelceller bærer array-grænser og et valgfrit cached resultat). XLSWriteSemanticWorkbookCommon åbner projektmappe-beholderen og kalder WriteCommon, som brugerdefinerede kilder normalt kalder først

Se også

grænseflade IXLSWorkbook · klasse TXLSXWorkbook · CreateReadOnlyView metode