Metode SaveSemanticSnapshot i ComputeSemanticHash
Zapisuje u tok verzionirani kanonski prikaz semantike radne knjige 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 lxHandle te TXLSXWorkbook u lxHandleX
Tipovi profila i opcija deklarirani su u lxSemanticSnapshot i vidljivi su kroz obje jedinice radne knjige
Profili
| Vrijednost | Značenje |
|---|---|
xlsspContent | Kanonski sadržaj radne knjige prikladan za uobičajene provjere semantičkog identiteta |
xlsspSecurityComplete | Sadržaj plus podržano neprozirno stanje sigurnosti i očuvanja koje je namjerno isključeno iz uobičajenog identiteta sadržaja |
Opcije
| Vrijednost | Uključeno stanje |
|---|---|
xlssoIncludeViewerState | Odabiri, stanje aktivnog prikaza i drugo podržano stanje namijenjeno pregledniku |
xlssoIncludeVolatileMetadata | Podržane vremenske oznake, metapodaci proizvođača i druga namjerno promjenjiva polja |
xlssoIncludeFormulaCachedResults | Pohranjeni rezultati formula i podržane predmemorije vanjskih veza bez ponovnog izračunavanja ili vanjskog I/O-a |
Preopterećenja bez parametara koriste xlsspContent s praznim skupom opcija
Pravila toka i identiteta
SaveSemanticSnapshotzapisuje na trenutačnu poziciju ciljnog toka te ne izvodi seek, ne postaje vlasnik i ne otpušta tok- Neuspjeh zapisa nizvodno može ostaviti prefiks u cilju, pa pozivatelji koji traže atomarno objavljivanje trebaju pisati u privremeni cilj prije zamjene odredišta
ComputeSemanticHashvraća 64 malih heksadecimalnih znakova i hash izračunava inkrementalno bez dodjele potpunog međuspremnika snimka- Snimak je semantički protokol HotXLS-a, a ne dokument XLS, XLSX, ODS, CSV ili PDF
- Uspoređujte snimke ili hasheve samo kada se verzija protokola, profil i skup opcija podudaraju
- Operacija ne sprema, ne preračunava, ne osvježava veze, ne pristupa vanjskim resursima i ne mijenja predmemorije radne knjige
Istovremenost i pogreške
Obje metode drže zakup čitanja radne knjige tijekom cijelog obilaska
Istovremena javna mutacija propada prije promjene stanja radne knjige s EXLSWorkbookWriteGuardUnavailable, dok otkrivena promjena generacije ili nepodržana dvosmislena semantička struktura podiže EXLSSemanticSnapshot
Primjer 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;
Primjer za C++Builder
TFileStream *snapshot = new TFileStream(
L"workbook.semantic", fmCreate);
try
{
workbook->SaveSemanticSnapshot(snapshot);
}
__finally
{
delete snapshot;
}
WideString hash = workbook->ComputeSemanticHash();
Vidi također
sučelje IXLSWorkbook · klasa TXLSXWorkbook · CreateReadOnlyView metoda
Sučelja proširenja
Implementirajte IXLSSemanticWorkbookSource za emitiranje ili hash snimke bilo kojeg izvora, i neobavezno IXLSSemanticFormulaResolver kako emitirane formule nose razriješene informacije vanjskih referenci i definiranih imena
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 zapisivač je neprozirna ručica: ne pozivajte njegove primitivne metode — BeginContainer / EndContainer okviruju označeni spremnik, a WriteNull, WriteBoolean, WriteUInt32, WriteUInt64, WriteInt32, WriteInt64, WriteBinary64, WriteWideString i WriteBytes kodiraju po jednu kanonsku primitivu, s Finish koji zapečaćuje tok i Finished koji izvještava o dovršenosti — proslijedite je natrag u pomoćnike za emitiranje u nastavku kako bi svaki proizvođač emitirao identične bajtove
Globalne funkcije ulaznih točaka
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 zapis stila kanonskim defaultima prije uređivanja pojedinačnih polja; XLSBuiltinSemanticNumberFormat preslikava id ugrađenog formata broja (ispod 164) u njegov niz formata, koji potrošači trebaju za tumačenje emitiranih stilova i dekodiranih tokova
Rječnik modela
| Group | Types |
|---|---|
| Sheet | TXLSSemanticSheetKind (worksheet, macro, chart, VBA, unknown), TXLSSemanticSheetVisibility (visible, hidden, very hidden), TXLSSemanticDefinedNameScope (radna knjiga ili radni list), TXLSSemanticRange / TXLSSemanticRanges (pravokutni rasponi koje koriste spajanja, uvjetni formati i tablice) |
| Cell | TXLSSemanticCellKind (blank, number, datetime, text, boolean, error, formula) |
| Style | TXLSSemanticCellStyle (potpuni kanonski stil ćelije), TXLSSemanticColor s TXLSSemanticColorKind (none, automatic, system, ARGB, theme, indexed) i nijansom, TXLSSemanticBorderEdge / TXLSSemanticBorderStyle, TXLSSemanticFillPattern, TXLSSemanticGradientKind / TXLSSemanticGradientStop / TXLSSemanticGradientStops, TXLSSemanticUnderline, TXLSSemanticFontVerticalAlign |
| Formula | TXLSSemanticFormulaEncoding (parsirano stablo naspram neprozirnog teksta), TXLSSemanticFormulaArrayKind (none, CSE, dynamic), TXLSSemanticFormulaNodeKind, TXLSSemanticFormulaRangeKind, TXLSSemanticFormulaLinkKind (isti list, internal, external, add-in, DDE, OLE, other), TXLSSemanticFormulaNameKind |
| Drawing i grafikoni | TXLSSemanticDrawingKind (image, textbox, chart, group, form control), TXLSSemanticDrawingAnchorMode (move and size, move only, absolute), TXLSSemanticImageFormat, TXLSSemanticChartFamily |
Pomoćnici za emitiranje
Ove globalne funkcije zapisuju jedan fragment modela u zapisivač proslijeđen WriteCommon-u: XLSWriteSemanticLiteralCell, XLSWriteSemanticCellStyle, XLSWriteSemanticColor, XLSWriteSemanticRanges, XLSWriteSemanticMerge, XLSWriteSemanticAxisEntry, XLSWriteSemanticFormulaTree, XLSWriteSemanticFormulaDefinition i XLSWriteSemanticFormulaCell (ćelije formula nose granice polja i neobavezan predmemorirani rezultat). XLSWriteSemanticWorkbookCommon otvara spremnik radne knjige i poziva WriteCommon, koji ga prvi obično pozivaju prilagođeni izvori
Vidi također
IXLSWorkbook sučelje · TXLSXWorkbook klasa · CreateReadOnlyView metoda