Τεκμηρίωση HotXLS

Μέθοδοι SaveSemanticSnapshot και ComputeSemanticHash

Γράφει σε ροή μια εκδοθείσα με αριθμό έκδοσης κανονική αναπαράσταση της σημασιολογίας του βιβλίου εργασίας ή υπολογίζει το SHA-256 των ακριβώς εκείνων των byte

Σύνταξη

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;

Οι μέθοδοι εκτίθενται από τα Classic IXLSWorkbook και TXLSWorkbook στο lxHandle και από το TXLSXWorkbook στο lxHandleX

Οι τύποι προφίλ και επιλογών δηλώνονται στο lxSemanticSnapshot και είναι ορατοί μέσω των δύο μονάδων βιβλίου εργασίας

Προφίλ

ΤιμήΣημασία
xlsspContentΚανονικό περιεχόμενο βιβλίου εργασίας κατάλληλο για συνηθισμένους ελέγχους σημασιολογικής ταυτότητας
xlsspSecurityCompleteΤο περιεχόμενο συν την υποστηριζόμενη αδιαφανή κατάσταση ασφάλειας και διατήρησης που σκόπιμα εξαιρείται από τη συνηθισμένη ταυτότητα περιεχομένου

Επιλογές

ΤιμήΚατάσταση που περιλαμβάνεται
xlssoIncludeViewerStateΕπιλογές, κατάσταση ενεργής προβολής και άλλη υποστηριζόμενη κατάσταση προσανατολισμένη στον θεατή
xlssoIncludeVolatileMetadataΥποστηριζόμενες χρονικές σημάνσεις, μεταδεδομένα παραγωγού και άλλα σκόπιμα μεταβλητά πεδία
xlssoIncludeFormulaCachedResultsΑποθηκευμένα αποτελέσματα τύπων και υποστηριζόμενες cache εξωτερικών συνδέσμων χωρίς επανυπολογισμό ή εξωτερικό I/O

Το σύνολο επιλογών έχει τύπο TXLSSemanticSnapshotOptions = set of TXLSSemanticSnapshotOption. Οι υπερφορτώσεις χωρίς παραμέτρους χρησιμοποιούν το xlsspContent με κενό σύνολο επιλογών

Κανόνες ροής και ταυτότητας

Συγχρονισμός και σφάλματα

Και οι δύο μέθοδοι κρατούν μίσθωση ανάγνωσης του βιβλίου εργασίας για όλη τη διάσχιση

Μια ταυτόχρονη δημόσια μεταβολή αποτυγχάνει πριν αλλάξει η κατάσταση του βιβλίου εργασίας με EXLSWorkbookWriteGuardUnavailable, ενώ μια ανιχνευθείσα αλλαγή γενιάς ή μια μη υποστηριζόμενη αμφίσημη σημασιολογική δομή προκαλεί EXLSSemanticSnapshot

Παράδειγμα 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;

Παράδειγμα C++Builder

TFileStream *snapshot = new TFileStream(
  L"workbook.semantic", fmCreate);
try
{
  workbook->SaveSemanticSnapshot(snapshot);
}
__finally
{
  delete snapshot;
}

WideString hash = workbook->ComputeSemanticHash();

Αναφορά μοντέλου στιγμιότυπου

Η μηχανή στιγμιότυπου δεν είναι δεμένη με αντικείμενα βιβλίου εργασίας: ό,τι ακολουθεί δηλώνεται στη μονάδα lxSemanticSnapshot, και οι μέθοδοι του βιβλίου εργασίας είναι λεπτά wrappers πάνω στα ίδια καθολικά σημεία εισόδου

Διεπαφές επέκτασης

Υλοποιήστε την IXLSSemanticWorkbookSource για να εκπέμψετε ή να κατακερματίσετε ένα στιγμιότυπο οποιασδήποτε πηγής, και προαιρετικά την IXLSSemanticFormulaResolver, ώστε οι εκπεμπόμενοι τύποι να κουβαλούν επιλυμένη πληροφορία για εξωτερικές αναφορές και ονομασμένα ονόματα

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;

Μέσα στη WriteCommon ο writer είναι ένα αδιαφανές handle: μην καλείτε τις primitive μεθόδους του — οι BeginContainer / EndContainer πλαισιώνουν ένα tagged container και οι WriteNull, WriteBoolean, WriteUInt32, WriteUInt64, WriteInt32, WriteInt64, WriteBinary64, WriteWideString και WriteBytes κωδικοποιούν από ένα κανονικό primitive η καθεμία, με τη Finish να σφραγίζει τη ροή και τη Finished να αναφέρει την ολοκλήρωση — περάστε το πίσω στους emission helpers παρακάτω, ώστε κάθε παραγωγός να εκπέμπει πανομοιότυπα bytes

Καθολικά σημεία εισόδου

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 γεμίζει μια εγγραφή στυλ με τις κανονικές προεπιλογές, πριν επεξεργαστεί κανείς τα μεμονωμένα πεδία· η XLSBuiltinSemanticNumberFormat αντιστοιχίζει ένα builtin id μορφής αριθμών (κάτω από 164) στο format string του, στοιχείο που χρειάζονται οι καταναλωτές για να ερμηνεύουν τα εκπεμπόμενα στυλ και τις αποκωδικοποιημένες ροές

Λεξιλόγιο μοντέλου

ΟμάδαΤύποι
ΦύλλοTXLSSemanticSheetKind (worksheet, macro, chart, VBA, unknown), TXLSSemanticSheetVisibility (visible, hidden, very hidden), TXLSSemanticDefinedNameScope (βιβλίο εργασίας ή φύλλο εργασίας), TXLSSemanticRange / TXLSSemanticRanges (ορθογώνια εύρη που χρησιμοποιούνται από merges, μορφοποιήσεις υπό όρους και πίνακες)
ΚελίTXLSSemanticCellKind (κενό, αριθμός, ημερομηνία/ώρα, κείμενο, boolean, σφάλμα, τύπος)
ΣτυλTXLSSemanticCellStyle (πλήρες κανονικό στυλ κελιού), TXLSSemanticColor με TXLSSemanticColorKind (none, automatic, system, ARGB, theme, indexed) και ένα tint, TXLSSemanticBorderEdge / TXLSSemanticBorderStyle, TXLSSemanticFillPattern, TXLSSemanticGradientKind / TXLSSemanticGradientStop / TXLSSemanticGradientStops, TXLSSemanticUnderline, TXLSSemanticFontVerticalAlign
ΤύποςTXLSSemanticFormulaEncoding (parsed δέντρο έναντι αδιαφανούς κειμένου), TXLSSemanticFormulaArrayKind (κανένα, CSE, δυναμικό), TXLSSemanticFormulaNodeKind, TXLSSemanticFormulaRangeKind, TXLSSemanticFormulaLinkKind (ίδιο φύλλο, εσωτερικό, εξωτερικό, add-in, DDE, OLE, άλλο), TXLSSemanticFormulaNameKind
Σχέδια και γραφήματαTXLSSemanticDrawingKind (εικόνα, textbox, γράφημα, ομάδα, form control), TXLSSemanticDrawingAnchorMode (μετακίνηση και μέγεθος, μόνο μετακίνηση, απόλυτο), TXLSSemanticImageFormat, TXLSSemanticChartFamily

Βοηθοί εκπομπής

Αυτά τα καθολικά γράφουν ένα τμήμα του μοντέλου στον writer που περνιέται στη WriteCommon: XLSWriteSemanticLiteralCell, XLSWriteSemanticCellStyle, XLSWriteSemanticColor, XLSWriteSemanticRanges, XLSWriteSemanticMerge, XLSWriteSemanticAxisEntry, XLSWriteSemanticFormulaTree, XLSWriteSemanticFormulaDefinition και XLSWriteSemanticFormulaCell (τα κελιά τύπων κουβαλούν όρια πίνακα και προαιρετικό cached αποτέλεσμα). Η XLSWriteSemanticWorkbookCommon ανοίγει το container του βιβλίου εργασίας και καλεί τη WriteCommon, που οι προσαρμοσμένες πηγές συνήθως καλούν πρώτη

Δείτε επίσης

διεπαφή IXLSWorkbook · κλάση TXLSXWorkbook · Μέθοδος CreateReadOnlyView