傳統 XLS 活頁簿中繼資料保留
HotXLS 會保留 Excel 可放在傳統 .xls 檔案中的活頁簿層級 BIFF8 中繼資料記錄。這包含已儲存作者資訊、活頁簿共用中繼資料,以及未以可編輯高階 API 物件公開的修訂保護記錄
保留的記錄
WRITEACCESS($005C) stores Excel user 名稱 last saved 活頁簿. HotXLS exposes 此 透過IXLSWorkbook.LastSavedBy/TXLSWorkbook.LastSavedByFILESHARING($005B) 與FILESHARING2($01A5) 會在開啟並再次儲存 Excel 建立的活頁簿時保留下來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會繼續透過現有的原始記錄保留路徑往返
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 的四個日期與數值屬性(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 :
Workbook.EncryptionPassword := 'secret';
Workbook.SaveAs('encrypted.xls');