مستندات HotXLS

متدهای SaveSemanticSnapshot و ComputeSemanticHash

نمایش متعارف نسخه‌دار از معناشناسی کتاب کار را به جریان می‌نویسد یا هش SHA-256 دقیقاً همان بایت‌ها را محاسبه می‌کند

سینتکس

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;

این متدها توسط IXLSWorkbook و TXLSWorkbook کلاسیک در lxHandle و توسط TXLSXWorkbook در lxHandleX در معرض دید قرار می‌گیرند

نوع‌های پروفایل و گزینه در lxSemanticSnapshot تعریف شده‌اند و از طریق هر دو واحد کتاب کار دیده می‌شوند

پروفایل‌ها

مقدارمعنا
xlsspContentمحتوای متعارف کتاب کار مناسب برای بررسی‌های معمولی هویت معنایی
xlsspSecurityCompleteمحتوا به‌علاوه وضعیت امنیتی و حفاظتی مبهم پشتیبانی‌شده که آگاهانه از هویت معمولی محتوا مستثنی شده است

گزینه‌ها

مقداروضعیت شامل‌شده
xlssoIncludeViewerStateگزینش‌ها، وضعیت نمای فعال و سایر وضعیت‌های پشتیبانی‌شده متوجه بیننده
xlssoIncludeVolatileMetadataمهرهای زمانی پشتیبانی‌شده، فراداده‌های تولیدکننده و سایر میدان‌های آگاهانه فرّار
xlssoIncludeFormulaCachedResultsنتایج ذخیره‌شده فرمول‌ها و حافظه‌های پنهان پیوند خارجی پشتیبانی‌شده بدون محاسبه مجدد یا ورودی/خروجی خارجی

نسخه‌های سربارگذاری‌شده بدون پارامتر از 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();

مرجع مدل snapshot

رابط‌های افزونه

برای تولید یا هش کردن یک snapshot از هر منبعی، 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 نویسنده یک هندل مات است: روش‌های ابتدایی آن را مستقیماً صدا نزنید — BeginContainer / EndContainer یک کانتینر برچسب‌دار را قاب می‌کنند و WriteNull، WriteBoolean، WriteUInt32، WriteUInt64، WriteInt32، WriteInt64، WriteBinary64، WriteWideString و WriteBytes هر کدام یک primitive کانونی را کدگذاری می‌کنند، Finish جریان را مهر می‌کند و Finished تکمیل را گزارش می‌دهد — آن را به کمکی‌کننده‌های انتشار پایین برگردانید تا هر تولیدکننده بایت‌های یکسانی منتشر کند

عمومی‌های نقطه ورود

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 شناسه قالب عددی داخلی (کمتر از 164) را به رشته قالب آن نگاشت می‌کند که مصرف‌کنندگان برای تفسیر استایل‌های منتشرشده و جریان‌های رمزگشایی‌شده به آن نیاز دارند

واژگان مدل

گروهنوع‌ها
برگهTXLSSemanticSheetKind (کاربرگ، ماکرو، نمودار، VBA، ناشناخته)، TXLSSemanticSheetVisibility (نمایان، مخفی، کاملاً مخفی)، TXLSSemanticDefinedNameScope (کتاب کار یا کاربرگ)، TXLSSemanticRange / TXLSSemanticRanges (محدوده‌های مستطیلی که ادغام‌ها، قالب‌بندی‌های شرطی و جدول‌ها استفاده می‌کنند)
سلولTXLSSemanticCellKind (خالی، عدد، تاریخ/زمان، متن، Boolean، خطا، فرمول)
استایلTXLSSemanticCellStyle (استایل کانونی کامل سلول)، TXLSSemanticColor همراه با TXLSSemanticColorKind (هیچ، خودکار، سیستمی، ARGB، theme، اندیسی) و یک tint، TXLSSemanticBorderEdge / TXLSSemanticBorderStyle، TXLSSemanticFillPattern، TXLSSemanticGradientKind / TXLSSemanticGradientStop / TXLSSemanticGradientStops، TXLSSemanticUnderline، TXLSSemanticFontVerticalAlign
فرمولTXLSSemanticFormulaEncoding (درخت تجزیه‌شده در مقابل متن مات)، TXLSSemanticFormulaArrayKind (هیچ، CSE، پویا)، TXLSSemanticFormulaNodeKind، TXLSSemanticFormulaRangeKind، TXLSSemanticFormulaLinkKind (همان برگه، داخلی، خارجی، add-in، DDE، OLE، دیگر)، TXLSSemanticFormulaNameKind
ترسیم و نمودارTXLSSemanticDrawingKind (تصویر، جعبه متن، نمودار، گروه، کنترل فرم)، TXLSSemanticDrawingAnchorMode (جابه‌جایی و تغییر اندازه، فقط جابه‌جایی، مطلق)، TXLSSemanticImageFormat، TXLSSemanticChartFamily

کمکی‌کننده‌های انتشار

این عمومی‌ها یک قطعه مدل را در نویسنده‌ای که به WriteCommon پاس داده می‌شود می‌نویسند: XLSWriteSemanticLiteralCell، XLSWriteSemanticCellStyle، XLSWriteSemanticColor، XLSWriteSemanticRanges، XLSWriteSemanticMerge، XLSWriteSemanticAxisEntry، XLSWriteSemanticFormulaTree، XLSWriteSemanticFormulaDefinition و XLSWriteSemanticFormulaCell (سلول‌های فرمول کران آرایه و یک نتیجه کش‌شده اختیاری دارند). XLSWriteSemanticWorkbookCommon کانتینر کتاب کار را باز می‌کند و WriteCommon را صدا می‌زند که منابع سفارشی معمولاً اول آن را فراخوانی می‌کنند

همچنین ببینید

رابط IXLSWorkbook · کلاس TXLSXWorkbook · متد CreateReadOnlyView