Сохранение метаданных рабочей книги классического XLS
HotXLS сохраняет записи метаданных BIFF8 на уровне книги, которые Excel может помещать в классические файлы .xls . Сюда входят метаданные о сохранении, метаданные общего доступа к книге и записи защиты от изменений, не представленные как редактируемые высокоуровневые объекты 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;
Записи общего доступа к файлу и защиты от изменений намеренно сохраняются как необработанные полезные данные записей BIFF. HotXLS не переосмысливает и не переписывает их внутренние флаги и хэши паролей, поэтому книга, созданная Excel, может пройти через HotXLS без потери этих метаданныхCreatedDate, LastSavedDate, RevisionNumber, EditTimeMinutes) проходят полный цикл через поток свойств документа OLE, поэтому загруженная и сохранённая книга сохраняет исходные штампы времени, пока приложение их не изменит
Три флага защиты предоставляют сохранённые сырые записи как типизированные значения: SharedRevisionProtected mirrors the PROT4REV shared-workbook revision-tracking flag, SharedRevisionPasswordHash the legacy 16-bit PROT4REVPASSWORD hash, and WindowProtected the 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');