SaveSemanticSnapshot és ComputeSemanticHash metódusok
A munkafüzet-szemantika verziókezelt kanonikus reprezentációját streameli, vagy pontosan ezen bájtok SHA-256 értékét számítja ki
Szintaxis
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;
A metódusokat a klasszikus IXLSWorkbook és TXLSWorkbook az lxHandle egységben, a TXLSXWorkbook pedig az lxHandleX egységben teszi elérhetővé
A profil- és beállítástípusok az lxSemanticSnapshot egységben vannak deklarálva, és mindkét munkafüzet-egységen keresztül láthatók
Profilok
| Érték | Jelentés |
|---|---|
xlsspContent | Kanonikus munkafüzet-tartalom, amely a rendes szemantikai azonosság-ellenőrzésekhez alkalmas |
xlsspSecurityComplete | Tartalom, kiegészítve a támogatott átlátszatlan biztonsági és megőrzési állapottal, amelyet szándékosan zárnak ki a rendes tartalomazonosságból |
Beállítások
| Érték | Tartalmazott állapot |
|---|---|
xlssoIncludeViewerState | Kijelölések, aktív nézetállapot és egyéb támogatott megjelenítői állapot |
xlssoIncludeVolatileMetadata | Támogatott időbélyegek, előállítói metaadatok és egyéb szándékosan illékony mezők |
xlssoIncludeFormulaCachedResults | Tárolt képleteredmények és támogatott külső hivatkozás-gyorsítótárak újraszámítás vagy külső I/O nélkül |
A beállításkészlet típusa TXLSSemanticSnapshotOptions = set of TXLSSemanticSnapshotOption. A paraméter nélküli túlterhelések a xlsspContent profilt használják üres beállításkészlettel
Streamelési és azonossági szabályok
- A
SaveSemanticSnapshota cél stream aktuális pozíciójánál ír, és nem keres, nem birtokol és nem szabadít fel - Egy alsóbb rétegbeli írási hiba előtagot hagyhat a célban, ezért az atomi közzétételt igénylő hívók ideiglenes célba írjanak, mielőtt lecserélik a célt
- A
ComputeSemanticHash64 kisbetűs hexadecimális karaktert ad vissza, és teljes pillanatkép-puffer lefoglalása nélkül, növekményesen hashel - A pillanatkép egy HotXLS szemantikai protokoll, nem pedig XLS, XLSX, ODS, CSV vagy PDF dokumentum
- Pillanatképeket vagy hasheket csak akkor hasonlítson össze, ha a protokollverzió, a profil és a beállításkészlet egyezik
- A művelet nem ment, nem számol újra, nem frissíti a hivatkozásokat, nem ér el külső erőforrásokat, és nem módosítja a munkafüzet gyorsítótárait
Egyidejűség és hibák
Mindkét metódus a teljes bejárás idejére munkafüzet olvasási foglalást tart
Egy egyidejű nyilvános módosítás EXLSWorkbookWriteGuardUnavailable kivétellel hiúsul meg, mielőtt megváltoztatná a munkafüzet állapotát, míg egy észlelt generációváltás vagy nem támogatott, kétértelmű szemantikai struktúra EXLSSemanticSnapshot kivételt vált ki
Delphi-példa
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-példa
TFileStream *snapshot = new TFileStream(
L"workbook.semantic", fmCreate);
try
{
workbook->SaveSemanticSnapshot(snapshot);
}
__finally
{
delete snapshot;
}
WideString hash = workbook->ComputeSemanticHash();
Pillanatkép-modell referencia
A pillanatkép-motor nem kötődik munkafüzet-objektumokhoz: minden az alábbiakban a lxSemanticSnapshot egységben van deklarálva, a munkafüzet-metódusok pedig vékony burkolók ugyanazon globális belépési pontok fölött
Bővítőfelületek
Implementálja az IXLSSemanticWorkbookSource felületet, hogy bármely forrásról pillanatképet bocsásson ki vagy hash-t számítson, valamint opcionálisan az IXLSSemanticFormulaResolver felületet, hogy a kibocsátott képletek hordozzák a feloldott külső hivatkozás- és definiált névre vonatkozó információkat
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;
A WriteCommon-on belül az író átlátszatlan fogantyú: ne hívja a primitív metódusait — a BeginContainer / EndContainer címkézett tárolót fog közre, a WriteNull, WriteBoolean, WriteUInt32, WriteUInt64, WriteInt32, WriteInt64, WriteBinary64, WriteWideString és WriteBytes mindegyike egy-egy kanonikus primitívet kódol, a Finish lezárja a streamet, a Finished pedig a befejezést jelenti — adja vissza az írót az alábbi kibocsátási segédeknek, hogy minden előállító azonos bájtokat bocsásson ki
Belépési pontként használható globálisok
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;
Az XLSInitializeSemanticCellStyle a kanonikus alapértékekkel tölti fel a stílusrekordot, mielőtt bárki az egyes mezőket szerkesztené; az XLSBuiltinSemanticNumberFormat a beépített számformátum-azonosítót (164 alatti) a formátumszövegére képezi le, amelyre a fogyasztóknak szüksége van a kibocsátott stílusok és a dekódolt streamek értelmezéséhez
Modell-szókincs
| Csoport | Típusok |
|---|---|
| Munkalap | TXLSSemanticSheetKind (munkalap, makró, diagram, VBA, ismeretlen), TXLSSemanticSheetVisibility (látható, rejtett, mélyen rejtett), TXLSSemanticDefinedNameScope (munkafüzet vagy munkalap), TXLSSemanticRange / TXLSSemanticRanges (téglalap alakú tartományok, amelyeket az egyesítések, a feltételes formázások és a táblázatok használnak) |
| Cella | TXLSSemanticCellKind (üres, szám, dátumidő, szöveg, logikai, hiba, képlet) |
| Stílus | TXLSSemanticCellStyle (teljes kanonikus cellastílus), TXLSSemanticColor TXLSSemanticColorKind típussal (nincs, automatikus, rendszer, ARGB, téma, indexelt) és árnyalattal, TXLSSemanticBorderEdge / TXLSSemanticBorderStyle, TXLSSemanticFillPattern, TXLSSemanticGradientKind / TXLSSemanticGradientStop / TXLSSemanticGradientStops, TXLSSemanticUnderline, TXLSSemanticFontVerticalAlign |
| Képlet | TXLSSemanticFormulaEncoding (elemzett fa vagy átlátszatlan szöveg), TXLSSemanticFormulaArrayKind (nincs, CSE, dinamikus), TXLSSemanticFormulaNodeKind, TXLSSemanticFormulaRangeKind, TXLSSemanticFormulaLinkKind (azonos munkalap, belső, külső, bővítmény, DDE, OLE, egyéb), TXLSSemanticFormulaNameKind |
| Rajz és diagramok | TXLSSemanticDrawingKind (kép, szövegdoboz, diagram, csoport, űrlapvezérlő), TXLSSemanticDrawingAnchorMode (mozgás és méretezés, csak mozgás, abszolút), TXLSSemanticImageFormat, TXLSSemanticChartFamily |
Kibocsátási segédek
Ezek a globálisok egy-egy modelltöredéket írnak a WriteCommon-nak átadott íróba: XLSWriteSemanticLiteralCell, XLSWriteSemanticCellStyle, XLSWriteSemanticColor, XLSWriteSemanticRanges, XLSWriteSemanticMerge, XLSWriteSemanticAxisEntry, XLSWriteSemanticFormulaTree, XLSWriteSemanticFormulaDefinition és XLSWriteSemanticFormulaCell (a képletcellák hordozzák a tömbhatárokat és egy opcionális gyorsítótárazott eredményt). Az XLSWriteSemanticWorkbookCommon megnyitja a munkafüzet-tárolót, és meghívja a WriteCommon metódust, amelyet az egyéni források normál esetben először hívnak meg
Lásd még
IXLSWorkbook interfész · TXLSXWorkbook osztály · CreateReadOnlyView metódus