Metodele SaveSemanticSnapshot și ComputeSemanticHash
Scrie în flux o reprezentare canonică versionată a semanticii registrului de lucru sau calculează SHA-256-ul exact al acelor octeți
Sintaxă
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;
Metodele sunt expuse de Classic IXLSWorkbook și TXLSWorkbook în lxHandle și de TXLSXWorkbook în lxHandleX
Tipurile de profil și de opțiuni sunt declarate în lxSemanticSnapshot și sunt vizibile prin ambele unități de registru de lucru
Profile
| Valoare | Semnificație |
|---|---|
xlsspContent | Conținut canonic al registrului de lucru potrivit pentru verificări ordinare de identitate semantică |
xlsspSecurityComplete | Conținutul plus starea de securitate și de păstrare opacă suportată, exclusă în mod intenționat din identitatea ordinară de conținut |
Opțiuni
| Valoare | Starea inclusă |
|---|---|
xlssoIncludeViewerState | Selecțiile, starea vizualizării active și alte stări suportate destinate vizualizatorului |
xlssoIncludeVolatileMetadata | Marje temporale suportate, metadate de producător și alte câmpuri intenționat volatile |
xlssoIncludeFormulaCachedResults | Rezultate de formule stocate și cache-uri de legături externe suportate, fără recalculare sau I/O extern |
Supraîncărcările fără parametri folosesc xlsspContent cu un set gol de opțiuni
Reguli de flux și de identitate
SaveSemanticSnapshotscrie la poziția curentă a fluxului-țintă și nu efectuează seek, nu devine proprietarul și nu eliberează fluxul- Un eșec de scriere din aval poate lăsa un prefix în țintă, deci apelanții care necesită publicare atomică ar trebui să scrie într-o țintă temporară înainte de a înlocui destinația
ComputeSemanticHashreturnează 64 de caractere hexazecimale minuscule și calculează hash-ul incremental fără a aloca un buffer complet de instantaneu- Instantaneul este un protocol semantic HotXLS, nu un document XLS, XLSX, ODS, CSV sau PDF
- Comparați instantanee sau hash-uri doar atunci când versiunea protocolului, profilul și setul de opțiuni coincid
- Operația nu salvează, nu recalculează, nu reîmprospătează legături, nu accesează resurse externe și nu mută cache-urile registrului de lucru
Concurență și erori
Ambele metode mențin un lease de citire al registrului de lucru pentru întreaga parcurgere
O mutație publică concurentă eșuează înainte de a schimba starea registrului de lucru cu EXLSWorkbookWriteGuardUnavailable, în timp ce o schimbare de generație detectată sau o structură semantică ambiguă nesuportată ridică EXLSSemanticSnapshot
Exemplu 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;
Exemplu C++Builder
TFileStream *snapshot = new TFileStream(
L"workbook.semantic", fmCreate);
try
{
workbook->SaveSemanticSnapshot(snapshot);
}
__finally
{
delete snapshot;
}
WideString hash = workbook->ComputeSemanticHash();
Consultați și
Interfața IXLSWorkbook · Clasa TXLSXWorkbook · Metoda CreateReadOnlyView