Dokumentacija HotXLS

Metode SaveSemanticSnapshot i ComputeSemanticHash

Upisuje u tok verzionisan kanonski prikaz semantike radne sveske ili izračunava SHA-256 upravo tih bajtova

Sintaksa

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;

Metode izlažu klasični IXLSWorkbook i TXLSWorkbook u lxHandlei TXLSXWorkbook u lxHandleX

Tipovi profila i opcija deklarisani su u lxSemanticSnapshot i vidljivi su kroz obe jedinice radne sveske

Profili

VrednostZnačenje
xlsspContentKanonski sadržaj radne sveske pogodan za uobičajene provere semantičkog identiteta
xlsspSecurityCompleteSadržaj plus podržano nepropusno stanje bezbednosti i očuvanja koje je namerno izuzeto iz uobičajenog identiteta sadržaja

Opcije

VrednostObuhvaćeno stanje
xlssoIncludeViewerStateIzbiranja, stanje aktivnog prikaza i drugo podržano stanje namenjeno pregledaču
xlssoIncludeVolatileMetadataPodržane vremenske oznake, metapodaci proizvođača i druga namerno promenljiva polja
xlssoIncludeFormulaCachedResultsSačuvani rezultati formula i podržani keševi spoljnih veza bez ponovnog izračunavanja ili spoljnog I/O-a

The option set has type TXLSSemanticSnapshotOptions = set of TXLSSemanticSnapshotOptionPreopterećenja bez parametara koriste xlsspContent sa praznim skupom opcija

Pravila toka i identiteta

Istovremenost i greške

Oba metoda drže zakup čitanja radne sveske tokom celog obilaska

Istovremena javna mutacija propada pre promene stanja radne sveske sa EXLSWorkbookWriteGuardUnavailable, dok otkrivena promena generacije ili nepodržana dvosmislena semantička struktura podiže EXLSSemanticSnapshot

Primer za Delphi

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;

Primer za C++Builder

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

WideString hash = workbook->ComputeSemanticHash();

Referenca modela snimka

Pogon snimka nije vezan za objekte radne sveske: sve što je navedeno u nastavku deklarisano je u lxSemanticSnapshot, a metode radne sveske su tanki omotači oko istih globalnih ulaznih tačaka

Interfejsi za proširenje

Implementirajte IXLSSemanticWorkbookSource da emitujete ili heširate snimak bilo kog izvora, i po potrebi IXLSSemanticFormulaResolver da emitovane formule nose razrešene informacije o spoljnim referencama i definisanim imenima

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;

Unutar WriteCommon pisac je nepropusna ručka: ne pozivajte njegove primitivne metode — BeginContainer / EndContainer okviruju označeni kontejner, a WriteNull, WriteBoolean, WriteUInt32, WriteUInt64, WriteInt32, WriteInt64, WriteBinary64, WriteWideStringi WriteBytes kodiraju po jednu kanonsku primitivnu vrednost, pri čemu Finish zaptiva tok, a Finished prijavljuje dovršenost — prosledite ga nazad pomoćnim funkcijama za emisiju ispod, da svaki proizvođač emituje identične bajtove

Globalne ulazne tačke

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 popunjava slog stila kanonskim podrazumevanim vrednostima pre uređivanja pojedinačnih polja; XLSBuiltinSemanticNumberFormat preslikava id ugrađenog formata broja (ispod 164) u njegov formatni string, šta potrošači treba da tumače emitovane stilove i dekodirane tokove

Rečnik modela

GrupaTipovi
SheetTXLSSemanticSheetKind (radni list, makro list, list grafikona, VBA modul, nepoznat), TXLSSemanticSheetVisibility (vidljiv, skriven, veoma skriven), TXLSSemanticDefinedNameScope (radna sveska ili radni list), TXLSSemanticRange / TXLSSemanticRanges (pravougaoni opsezi koje koriste spojevi, uslovna oblikovanja i tabele)
CellTXLSSemanticCellKind (prazno, broj, datum/vreme, tekst, Bulova vrednost, greška, formula)
StyleTXLSSemanticCellStyle (kompletan kanonski stil ćelije), TXLSSemanticColor sa TXLSSemanticColorKind (nema, automatski, sistemski, ARGB, tema, indeksirano) i zasićenjem (tint), TXLSSemanticBorderEdge / TXLSSemanticBorderStyle, TXLSSemanticFillPattern, TXLSSemanticGradientKind / TXLSSemanticGradientStop / TXLSSemanticGradientStops, TXLSSemanticUnderline, TXLSSemanticFontVerticalAlign
FormulaTXLSSemanticFormulaEncoding (raščlanjeno stablo naspram nepropusnog teksta), TXLSSemanticFormulaArrayKind (nema, CSE, dinamička), TXLSSemanticFormulaNodeKind, TXLSSemanticFormulaRangeKind, TXLSSemanticFormulaLinkKind (isti list, interna, spoljna, add-in, DDE, OLE, druga), TXLSSemanticFormulaNameKind
Drawing and chartsTXLSSemanticDrawingKind (slika, tekstualni okvir, grafikon, grupa, forma kontrola), TXLSSemanticDrawingAnchorMode (pomeranje i promena veličine, samo pomeranje, apsolutno), TXLSSemanticImageFormat, TXLSSemanticChartFamily

Pomoćne funkcije za emisiju

Ovi globali upisuju jedan fragment modela u piscu koji se prosleđuje WriteCommon: XLSWriteSemanticLiteralCell, XLSWriteSemanticCellStyle, XLSWriteSemanticColor, XLSWriteSemanticRanges, XLSWriteSemanticMerge, XLSWriteSemanticAxisEntry, XLSWriteSemanticFormulaTree, XLSWriteSemanticFormulaDefinitioni XLSWriteSemanticFormulaCell (ćelije formula nose granice niza i opcionu keširanu vrednost). XLSWriteSemanticWorkbookCommon otvara kontejner radne sveske i poziva WriteCommon, koji prilagođeni izvori obično pozivaju prvi

Vidi takođe

interfejs IXLSWorkbook · klasa TXLSXWorkbook · CreateReadOnlyView metoda