如何让Autohotkey写入元数据,然后提取该元数据以重命名文件

时间:2019-03-01 21:55:40

标签: excel autohotkey

我正在使用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 :(得分:1)

我能够找到很多有关读取meta属性的信息,但是关于写入这些信息……嗯,我没有发现太多信息。我没有找到完整的解决方案,也就是工作代码示例,但是可能至少有两种方法可以做到这一点。

首先,这里是一些阅读meta属性的参考链接。如果链接消失,搜索“ FGP-FileGetProperties”应该会产生类似的结果。

写入Excel元属性的一种方法是使用COM。这可能不是首选,因为它将涉及打开文件,写入属性然后保存-这也可能很慢。例如,下面的代码(写入“ Comments”元属性)花费了4.2秒的时间执行-尽管创建Excel实例后仅需0.4秒的时间,所以您可能只想创建一次应用程序对象,直到更改完所有内容您需要的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产品的属性而设计的,它可能比打开每个文件更快,如上面的代码片段所示。此外,它可能也不会更改“修改日期”值。