SaveSemanticSnapshot ve ComputeSemanticHash yöntemleri
Çalışma kitabı anlamının sürümlenmiş kanonik gösterimini akışa yazar veya tam olarak bu baytların SHA-256 değerini hesaplar
Sözdizimi
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;
Yöntemler, Klasik IXLSWorkbook ve TXLSWorkbook tarafından lxHandle içinde, TXLSXWorkbook tarafından ise lxHandleX içinde sunulur
Profil ve seçenek türleri lxSemanticSnapshot içinde bildirilir ve her iki çalışma kitabı birimi üzerinden görünürdür
Profiller
| Değer | Anlam |
|---|---|
xlsspContent | Sıradan anlam kimliği denetimleri için uygun kanonik çalışma kitabı içeriği |
xlsspSecurityComplete | İçerik artı, sıradan içerik kimliğinden bilinçli olarak dışlanan desteklenen opak güvenlik ve koruma durumu |
Seçenekler
| Değer | Kapsanan durum |
|---|---|
xlssoIncludeViewerState | Seçimler, etkin görünüm durumu ve diğer desteklenen görüntüleyiciye yönelik durum |
xlssoIncludeVolatileMetadata | Desteklenen zaman damgaları, üretici meta verileri ve diğer bilinçli olarak geçici alanlar |
xlssoIncludeFormulaCachedResults | Depolanan formül sonuçları ve desteklenen dış bağlantı önbellekleri, yeniden hesaplama veya dış G/Ç olmadan |
Seçenek kümesinin türü TXLSSemanticSnapshotOptions = set of TXLSSemanticSnapshotOption şeklindedir. Parametresiz aşırı yüklemeler, boş seçenek kümesiyle xlsspContent profilini kullanır
Akış ve kimlik kuralları
SaveSemanticSnapshothedef akışın geçerli konumuna yazar ve akışı aramaz, sahiplenmez veya serbest bırakmaz- Aşağı akıştaki bir yazma hatası hedefte bir önek bırakabilir; bu nedenle atomik yayımlama gerektiren çağıranlar hedefi değiştirmeden önce geçici bir hedefe yazmalıdır
ComputeSemanticHash64 küçük harf onaltılık karakter döndürür ve eksiksiz bir anlık görüntü arabelleği ayırmadan artımlı olarak karma oluşturur- Anlık görüntü bir HotXLS anlam protokolüdür; XLS, XLSX, ODS, CSV veya PDF belgesi değildir
- Anlık görüntüleri veya karmaları yalnızca protokol sürümü, profil ve seçenek kümesi eşleştiğinde karşılaştırın
- İşlem kaydetmez, yeniden hesaplamaz, bağlantıları yenilemez, dış kaynaklara erişmez veya çalışma kitabı önbelleklerini değiştirmez
Modern hücre özellikleri
TXLSSemanticCellStyle.CellControlKind, xlssControlNone, xlssControlUnknown ve xlssControlCheckbox içeren TXLSSemanticCellControlKind türündedir; CellControlDefaultState, xlssCheckboxUnchecked, xlssCheckboxChecked ve xlssCheckboxBlank içeren TXLSSemanticCheckboxDefaultState türündedir
XLSX stil okumaları, hücreler oluşturmadan doğrudan ve devralınan denetimleri çözer; kanonik stil serileştirmesi, bilinmeyen bir özellik çantasını sıradan hücre saymak yerine xlssControlUnknown'u reddeder
Anlık görüntüler ve karmalar, tüm sütunları hücrelere genişletmeden komşu eşit bölgeleri birleştirerek normalleştirilmiş etkin denetim dikdörtgenlerini içerir; ilgisiz varsayılan-olmayan stil kaplamaları mevcut desteklenmeyen-normalleştirme sınırlarını korur
TXLSXWorkbook.ReadSemanticFeatures(xlsxSemanticCellImages, Sheet, AMaxBytes, AMaxItems), hücre adresine göre anahtarlanmış ayrık girdileri döndürür; tam kodlanmış PNG veya JPEG baytları, içerik türü, alternatif metin ve dekoratif meta veri dahil; kotalar kanonik baytları ve resim girdilerini kapsar ve aşırı büyük yükler kopyalamadan önce reddedilir
Çalışma kitabı karşılaştırması, lcoDrawings seçildiğinde bu resim tanımlarını içerir; lcoCellStyles ve lcoBlankStyleRegions ise etkin Checkbox biçimlerini içerir; yalnızca eşleşen fallback hataları, ayrı resimleri eşit yapmaz
Bilinmeyen zengin değerli resim grafikleri, seçili özellik karşılaştırması veya anlık görüntü geçişi sırasında EXLSSemanticSnapshot fırlatır; bu işlemler çalışma kitabı okuma kirasını tutar ve incelenen hücreleri hesaplamaz
Eşzamanlılık ve hatalar
Her iki yöntem de tüm geçiş boyunca bir çalışma kitabı okuma kiralaması tutar
Eşzamanlı bir genel değişiklik, çalışma kitabı durumu değiştirilmeden EXLSWorkbookWriteGuardUnavailable ile başarısız olur; algılanan bir jenerasyon değişimi veya desteklenmeyen belirsiz anlam yapısı ise EXLSSemanticSnapshot oluşturur
Delphi örneği
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 örneği
TFileStream *snapshot = new TFileStream(
L"workbook.semantic", fmCreate);
try
{
workbook->SaveSemanticSnapshot(snapshot);
}
__finally
{
delete snapshot;
}
WideString hash = workbook->ComputeSemanticHash();
Anlık görüntü modeli başvurusu
Anlık görüntü motoru çalışma kitabı nesnelerine bağlı değildir: aşağıdaki her şey lxSemanticSnapshot içinde bildirilir ve çalışma kitabı yöntemleri, aynı genel giriş noktalarının üzerindeki ince sarmalayıcılardır
Genişletme arayüzleri
Herhangi bir kaynağın anlık görüntüsünü üretmek veya bu görüntünün karmasını oluşturmak için IXLSSemanticWorkbookSource arayüzünü; üretilen formüllerin çözümlenmiş dış başvuru ve tanımlı ad bilgisini taşıması için ise isteğe bağlı olarak IXLSSemanticFormulaResolver arayüzünü uygulayın
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 içinde yazıcı opak bir tanıtıcıdır: ilkel yöntemlerini doğrudan çağırmayın — BeginContainer / EndContainer etiketli bir kapsayıcıyı çerçeveler; WriteNull, WriteBoolean, WriteUInt32, WriteUInt64, WriteInt32, WriteInt64, WriteBinary64, WriteWideString ve WriteBytes her birinde bir kanonik ilkel değeri kodlar; Finish akışı mühürler, Finished ise tamamlanmayı bildirir — her üreticinin birebir aynı baytları üretmesi için tanıtıcıyı aşağıdaki üretim yardımcılarına geri geçirin
Global giriş noktaları
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, tek tek alanlar düzenlenmeden önce bir stil kaydını kanonik varsayılanlarla doldurur; XLSBuiltinSemanticNumberFormat, yerleşik sayı biçimi kimliğini (164'ün altındaki değerleri) biçim dizesiyle eşler — üretilen stilleri ve kodu çözülmüş akışları yorumlamak isteyenlerin buna ihtiyacı olur
Model sözlüğü
| Grup | Türler |
|---|---|
| Sayfa | TXLSSemanticSheetKind (worksheet, macro, chart, VBA, unknown), TXLSSemanticSheetVisibility (visible, hidden, very hidden), TXLSSemanticDefinedNameScope (çalışma kitabı veya çalışma sayfası), TXLSSemanticRange / TXLSSemanticRanges (birleştirmelerin, koşullu biçimlendirmelerin ve tabloların kullandığı dikdörtgen aralıklar) |
| Hücre | TXLSSemanticCellKind (blank, number, datetime, text, boolean, error, formula) |
| Stil | TXLSSemanticCellStyle (eksiksiz kanonik hücre stili), bir tint değeriyle birlikte TXLSSemanticColor ve TXLSSemanticColorKind (none, automatic, system, ARGB, theme, indexed), TXLSSemanticBorderEdge / TXLSSemanticBorderStyle, TXLSSemanticFillPattern, TXLSSemanticGradientKind / TXLSSemanticGradientStop / TXLSSemanticGradientStops, TXLSSemanticUnderline, TXLSSemanticFontVerticalAlign |
| Formül | TXLSSemanticFormulaEncoding (ayrıştırılmış ağaç veya opak metin), TXLSSemanticFormulaArrayKind (none, CSE, dynamic), TXLSSemanticFormulaNodeKind, TXLSSemanticFormulaRangeKind, TXLSSemanticFormulaLinkKind (same sheet, internal, external, add-in, DDE, OLE, other), TXLSSemanticFormulaNameKind |
| Çizim ve grafikler | TXLSSemanticDrawingKind (image, textbox, chart, group, form control), TXLSSemanticDrawingAnchorMode (move and size, move only, absolute), TXLSSemanticImageFormat, TXLSSemanticChartFamily |
Üretim yardımcıları
Bu global üyeler, WriteCommon'a geçirilen yazıcıya tek bir model parçası yazar: XLSWriteSemanticLiteralCell, XLSWriteSemanticCellStyle, XLSWriteSemanticColor, XLSWriteSemanticRanges, XLSWriteSemanticMerge, XLSWriteSemanticAxisEntry, XLSWriteSemanticFormulaTree, XLSWriteSemanticFormulaDefinition ve XLSWriteSemanticFormulaCell (formül hücreleri dizi sınırlarını ve isteğe bağlı bir önbellek sonucunu taşır). XLSWriteSemanticWorkbookCommon çalışma kitabı kapsayıcısını açar ve özel kaynakların normalde ilk çağırdığı WriteCommon yöntemini devreye getirir
Ayrıca bkz.
IXLSWorkbook arayüzü · TXLSXWorkbook sınıfı · CreateReadOnlyView yöntemi