我有一大套.xls
(Excel 97-2003工作簿)文件。它们中的一些包含VBA宏,我想找到一种自动过滤掉它们的方法,而无需在MS Excel中一个一个地打开它们。
有一个与我的问题类似的旧帖子,我已经下载了OLE Doc查看器,但无法打开.zip文件,看来它已经过时了...
有谁知道有没有API或工具来检查.xls
文件是否包含VBA宏,而无需在MS Excel中打开它?首先,我不必理会宏的内容。
PS:对于.xlsx
或.xlsm
文件,我们可以将其扩展名更改为.zip
包含某些.xml
文件的文件扩展名,并最终更改vbaProject.bin
为VBA宏。但是,此方法不适用于.xls
文件,重命名不会生成有效.zip
文件。
这是我为您准备的一个简单的Python 2.7解决方案:
它仅取决于项目页面上可用的OleFileIO_PL模块。OleFile解析器的优点是它不知道文件的“特定于Excel的”内容;它只知道更高级别的“ OLE存储”。因此,它可以快速分析文件,并且不存在执行潜在有害宏的风险。
import OleFileIO_PL
import argparse
if __name__=='__main__':
parser = argparse.ArgumentParser(description='Determine if an Excel 97-2007 file contains macros.', epilog='Will exit successfully (0) only if provided file is a valid excel file containing macros.')
parser.add_argument('filename', help="file name to analyse")
args=parser.parse_args()
# Test if a file is an OLE container:
if (not OleFileIO_PL.isOleFile(args.filename)):
exit("This document is not a valid OLE document.")
# Open an OLE file:
ole = OleFileIO_PL.OleFileIO(args.filename)
# Test if known streams/storages exist:
if (not ole.exists('workbook')):
exit("This document is not a valid Excel 97-2007 document.")
# Test if VBA specific streams exist:
if (not ole.exists('_VBA_PROJECT_CUR')):
exit("This document does not contain VBA macros.")
print("Valid Excel 97-2007 workbook WITH macros")
我在几个文件上成功地对其进行了测试。让我知道它是否适合您
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句