クラシック XLS ワークブックメタデータの保持
HotXLS は、Excel が従来の .xls ファイルに書き込めるワークブックレベルの BIFF8 メタデータ レコードを保持します。これには、保存者メタデータ、ブック共有メタデータ、編集可能な高レベル API オブジェクトとしては公開されない改訂保護レコードが含まれます
保持されるレコード
WRITEACCESS($005C) は、ワークブックを最後に保存した Excel ユーザー名を保持します。HotXLS はIXLSWorkbook.LastSavedBy/TXLSWorkbook.LastSavedByとしてこの値を公開しますFILESHARING($005B) とFILESHARING2($01A5) は、Excel 作成のブックを開いて再保存しても保持されますPROT4REV($01AF) とPROT4REVPASS($01BC) は、開いて保存する往復でもブックの改訂保護メタデータを保持しますHIDEOBJ($008D) と長さ 0 のTEMPLATE($0060) は、ブックの表示ポリシーとテンプレート マーカーを保持しますTABID($013D) とBOOKEXT($0863) は、シート タブ識別子とブック拡張メタデータを保持しますUSERSVIEWBEGIN($01AA) からUSERSVIEWEND($01AB) までは、ブックのグローバル領域とワークシート サブストリーム内の Excel カスタム ビューを保持し、ブロック内の未モデル化レコードも含めますOBPROJ、USES-ELFS、BOOKBOOL、BACKUP、FNGROUPCOUNT、COUNTRY、RECALCIDは、既存の raw-record 保持パスで引き続き往復保存できます
API サーフェイス
type
IXLSWorkbook = class
property LastSavedBy: WideString;
property EncryptionPassword: WideString;
end;
TXLSWorkbook = class
property LastSavedBy: WideString;
property EncryptionPassword: WideString;
property CreatedDate: TDateTime;
property LastSavedDate: TDateTime;
property RevisionNumber: Integer;
property EditTimeMinutes: Double;
property SharedRevisionProtected: Boolean;
property SharedRevisionPasswordHash: Word;
property WindowProtected: Boolean;
end;
SummaryInformation の 4 つの日付・数値プロパティ(CreatedDate、LastSavedDate、RevisionNumber、EditTimeMinutes)は OLE ドキュメント プロパティ ストリームを介して往復保存されるため、アプリケーションが変更しない限り、ロードして保存したワークブックは元のタイムスタンプを保ちます
3 つの保護フラグは、保持された raw レコードを型付きの値として公開します。SharedRevisionProtected は PROT4REV の共有ワークブック改訂追跡フラグに、SharedRevisionPasswordHash は従来の 16 ビット PROT4REVPASSWORD ハッシュに、WindowProtected はワークブック ウィンドウ構成をロックする WINDOWPROTECT フラグに対応します。これらはクラスでは読み書き可能なので、アプリケーションは Excel と同じ状態を作成できます
ファイル共有レコードと改訂保護レコードは、意図的に生の BIFF レコード ペイロードとして保持されます。HotXLS は内部フラグやパスワード ハッシュを再解釈したり書き換えたりしないため、Excel 作成のブックをそのメタデータを失わずに HotXLS を通過させられます
保存者ユーザー名の更新
uses lxHandle;
var
Workbook: TXLSWorkbook;
begin
Workbook := TXLSWorkbook.Create;
try
Workbook.Open('shared-template.xls');
Workbook.LastSavedBy := 'Build Server';
Workbook.SaveAs('shared-template-updated.xls');
finally
Workbook.Free;
end;
end;
暗号化の個別使用
ブック共有メタデータは HotXLS のファイル暗号化とは別です。暗号化された従来型 XLS ファイルを書き出すには、保存前に EncryptionPassword を設定します:
Workbook.EncryptionPassword := 'secret';
Workbook.SaveAs('encrypted.xls');