Как сделать так, чтобы Autohotkey записывал метаданные, а затем извлекал эти метаданные для использования при переименовании файла - PullRequest
0 голосов
/ 02 марта 2019

Я автоматизирую процесс с помощью Autohotkey, где переименовываю old.xlsx в document_archived_on_% Timestring , затем переименовываю current.xlsx в old.xlsx , затем переименование newest_document.xlsx в current.xlsx .

Эта часть была простой и отлично работает.

Я хочу добавить комментарий метаданных к newest_document.xlsx , который говорит "data_as_of_% Timestring%".Позже я хочу переименовать old.xlsx в "document_% metadata% .xlsx.

. Простой, работающий скрипт ниже:

;    Take newest report, rename it to current.  Take Current Report and move it to Old
;    Take oldest report and archive it.

;    Archive old report
FormatTime, Timestring, , yyyyMMdd
FileMove, G:\TPO_Project_DB\Old Data\old.xlsx, G:\TPO_Project_DB\Old Data\Eng_const_rpt_data_as_of_%Timestring%.xlsx

;    Rename and move "current.xlsx" to "old.xlsx"
FileMove, G:\TPO_Project_DB\Current Data\current.xlsx, G:\TPO_Project_DB\Old Data\old.xlsx

;    Rename and move newest report to current
FileMove, C:\TPOReports\Combined_eng_const_*, G:\TPO_Project_DB\Current Data\current.xlsx

1 Ответ

0 голосов
/ 07 марта 2019

Мне удалось найти много информации о чтении мета-свойств, но в отношении записи в них ... ну, я не нашел много.Я не нашел полного решения, то есть примеров рабочего кода, но может быть как минимум два способа сделать это.

Во-первых, вот несколько справочных ссылок для чтения мета-свойств.Если ссылки не работают, поиск «FGP - FileGetProperties» должен дать аналогичные результаты.

Один из способов записи мета-свойств Excel заключается в использовании COM.Это, скорее всего, не является предпочтительным, поскольку включает в себя открытие файла, запись свойства, а затем сохранение, что также может быть медленным.Например, приведенный ниже код (записывает в мета-свойство «Комментарии») для выполнения потребовалось 4.2 с, хотя всего через 0,4 с после создания экземпляра Excel, поэтому вы можете создать объект приложения один раз, пока не измените всенужный файл Excel.

f1::
sFilePath := A_Desktop . "\test.xls"
oExcel := ComObjCreate( "Excel.Application" )
oExcel.Workbooks.Open( sFilePath )
oExcel.ActiveWorkbook.BuiltinDocumentProperties( "Comments" ).Value := "Test text"
oExcel.ActiveWorkbook.Save
oExcel.Quit
Return

Другой метод предполагает использование DSOFile.dll, который можно найти здесь, https://support.microsoft.com/en-us/help/224351/the-dsofile-dll-files-lets-you-edit-office-document-properties-when-yo Я ничего не знаю об этом или о том, как его использовать, но он был разработандля управления свойствами продуктов Office и, вероятно, гораздо быстрее, чем открывать каждый файл, как показано в моем фрагменте кода выше.Кроме того, может также не изменять значение «Дата изменения».

...