我正在尝试提取Word docx中的所有嵌入式Excel文件 . 我知道我可以通过将docx的文件名更改为zip来快速完成此操作,然后在word / embeddings文件夹中找到所有Excel文件 .
问题是word / embeddings中的Excel文件具有非常通用的文件名(例如,Microsoft_Excel_Macro-Enabled_Worksheet1.xlsm,Microsoft_Excel_Macro-Enabled_Worksheet2.xlsm)而不是原始文件名 . 但是,原始文件实际上是csv而不是xlsm文件 .
我没有参与创建这个文档 . 我假设他们使用了Insert - > Object - > Create From File . 此外,我正在使用Word 2010,但根据兼容性检查器,该文档最初是使用Word 97-2003创建的,并且稍后使用Word 2007嵌入了这些文件 .
如果我进入docx,我可以找到原始文件名,右键单击嵌入式文件图标,然后转到宏启用工作表对象 - >转换... - >更改图标... - > Headers
但是,我不想手动为一堆嵌入的Excel文件执行此操作 .
那么有没有办法使用一些vba代码来提取所有嵌入文件的原始文件名列表?然后我可以使用此列表作为重命名通用命名文件的键 .
2 回答
使用
vba
我可以获取我的代码将所选文件的 Headers 打印到immediate window
(您可以在其他地方编写它) . 这是我的代码:这是@ user1964692为整个文档所做的事情,我将其包含在我的编辑中以供参考:
这是我将通过脚本使用的解决方案:
导航到
*.docx
所在的文件夹,然后在那里打开cmd
. 使用*.zip
扩展名制作word文档的副本 .xcopy Doc1.docx *.zip
然后使用7zip在
cmd
中提取文件 . 您应该将7za.exe
与文档放在同一文件夹中 .7za.exe x Doc1.zip -o *.xml.rels -r
xcopy document.xml.rels *.txt
稍后您可以搜索其中包含
.xls
的行(假设您在C驱动器中,请相应地更改路径):powershell Command "select-string -path "C:\document.txt" -Pattern ".xls" | select line | out-file C:\lines.txt -append"
您将在
lines.txt
文件中找到文件名,行号和整行,包括匹配(即.xls
) . 这将为您提供您要查找的文件的名称 .这是我最终做的事情: