Μέθοδοι 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 με κενό σύνολο επιλογών
Κανόνες ροής και ταυτότητας
- Το
SaveSemanticSnapshotγράφει στην τρέχουσα θέση της ροής-στόχου και δεν πραγματοποιεί seek, δεν γίνεται ιδιοκτήτης ούτε αποδεσμεύει τη ροή - Μια αποτυχία εγγραφής κατάντη μπορεί να αφήσει ένα πρόθεμα στον στόχο, ώστε οι καλούντες που απαιτούν ατομική δημοσίευση να πρέπει να γράψουν σε προσωρινό στόχο πριν αντικαταστήσουν τον προορισμό
- Το
ComputeSemanticHashεπιστρέφει 64 πεζούς δεκαεξαδικούς χαρακτήρες και υπολογίζει το κατακερματισμό επεκτατικά χωρίς να δεσμεύσει πλήρη buffer στιγμιότυπου - Το στιγμιότυπο είναι ένα σημασιολογικό πρωτόκολλο της HotXLS και όχι έγγραφο XLS, XLSX, ODS, CSV ή PDF
- Συγκρίνετε στιγμιότυπα ή κατακερματισμούς μόνο όταν η έκδοση πρωτοκόλλου, το προφίλ και το σύνολο επιλογών ταυτίζονται
- Η λειτουργία δεν αποθηκεύει, δεν επανυπολογίζει, δεν ανανεώνει συνδέσμους, δεν προσπελαύνει εξωτερικούς πόρους ούτε μεταβάλλει cache του βιβλίου εργασίας
Συγχρονισμός και σφάλματα
Και οι δύο μέθοδοι κρατούν μίσθωση ανάγνωσης του βιβλίου εργασίας για όλη τη διάσχιση
Μια ταυτόχρονη δημόσια μεταβολή αποτυγχάνει πριν αλλάξει η κατάσταση του βιβλίου εργασίας με 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