经典 XLS 工作簿元数据保留
HotXLS 会保留 Excel 写入经典 .xls 文件中的工作簿级 BIFF8 元数据记录。这包括保存者元数据、工作簿共享元数据,以及未作为可编辑高级 API 对象公开的修订保护记录
保留的记录
WRITEACCESS($005C)存储最后保存工作簿的 Excel 用户名。HotXLS 通过IXLSWorkbook.LastSavedBy/TXLSWorkbook.LastSavedBy暴露该信息- 打开并再次保存 Excel 创建的工作簿时,会保留
FILESHARING($005B)和FILESHARING2($01A5) PROT4REV($01AF)和PROT4REVPASS($01BC)在打开-保存循环中保留工作簿修订保护元数据HIDEOBJ($008D)和零长度TEMPLATE($0060)保留工作簿视图策略和模板标记TABID($013D)和BOOKEXT($0863)保留工作表标签标识符和工作簿扩展元数据USERSVIEWBEGIN($01AA)到USERSVIEWEND($01AB)在工作簿全局子流和工作表子流中保留 Excel 自定义视图,包括该块内未建模的记录OBPROJ、USES-ELFS、BOOKBOOL、BACKUP、FNGROUPCOUNT、COUNTRY和RECALCID继续通过现有的原始记录保留路径完成 Roundtrip
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;
The four SummaryInformation date and numeric properties (CreatedDate, LastSavedDate, RevisionNumber, EditTimeMinutes)经由 OLE 文档属性流往返,因此加载再保存的工作簿会保留原始戳记,除非应用程序主动修改
这三个保护标志把保留的原始记录以类型化值的形式暴露出来: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 before saving:
Workbook.EncryptionPassword := 'secret';
Workbook.SaveAs('encrypted.xls');