HotXLS dokumentáció

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ékJelentés
xlsspContentKanonikus munkafüzet-tartalom, amely a rendes szemantikai azonosság-ellenőrzésekhez alkalmas
xlsspSecurityCompleteTartalom, 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ékTartalmazott állapot
xlssoIncludeViewerStateKijelölések, aktív nézetállapot és egyéb támogatott megjelenítői állapot
xlssoIncludeVolatileMetadataTámogatott időbélyegek, előállítói metaadatok és egyéb szándékosan illékony mezők
xlssoIncludeFormulaCachedResultsTá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

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

CsoportTípusok
MunkalapTXLSSemanticSheetKind (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)
CellaTXLSSemanticCellKind (üres, szám, dátumidő, szöveg, logikai, hiba, képlet)
StílusTXLSSemanticCellStyle (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épletTXLSSemanticFormulaEncoding (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 diagramokTXLSSemanticDrawingKind (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