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
| Vrednost | Značenje |
|---|---|
xlsspContent | Kanonski sadržaj radne sveske pogodan za uobičajene provere semantičkog identiteta |
xlsspSecurityComplete | Sadržaj plus podržano nepropusno stanje bezbednosti i očuvanja koje je namerno izuzeto iz uobičajenog identiteta sadržaja |
Opcije
| Vrednost | Obuhvaćeno stanje |
|---|---|
xlssoIncludeViewerState | Izbiranja, stanje aktivnog prikaza i drugo podržano stanje namenjeno pregledaču |
xlssoIncludeVolatileMetadata | Podržane vremenske oznake, metapodaci proizvođača i druga namerno promenljiva polja |
xlssoIncludeFormulaCachedResults | Sač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
SaveSemanticSnapshotupisuje na trenutnu poziciju ciljnog toka i ne izvršava seek, ne postaje vlasnik i ne otpušta tok- Neuspeh upisa nizvodno može da ostavi prefiks u cilju, pa pozivaoci kojima treba atomarno objavljivanje treba da upišu u privremeni cilj pre zamene odredišta
ComputeSemanticHashvraća 64 malih heksadecimalnih znakova i haš izračunava inkrementalno bez dodele potpunog bafera snimka- Snimak je semantički protokol HotXLS-a, a ne dokument XLS, XLSX, ODS, CSV ili PDF
- Poredite snimke ili haševe samo kada se verzija protokola, profil i skup opcija podudaraju
- Operacija ne čuva, ne preračunava, ne osvežava veze, ne pristupa spoljnim resursima i ne mutira keševe radne sveske
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
| Grupa | Tipovi |
|---|---|
| Sheet | TXLSSemanticSheetKind (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) |
| Cell | TXLSSemanticCellKind (prazno, broj, datum/vreme, tekst, Bulova vrednost, greška, formula) |
| Style | TXLSSemanticCellStyle (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 |
| Formula | TXLSSemanticFormulaEncoding (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 charts | TXLSSemanticDrawingKind (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