validation如果一个xls文件包含VBAmacros,而无需在MS Excel中打开它

我有一大套.xls (Excel 97-2003工作簿)文件。 其中几个包含VBAmacros,我想find一种方法来自动筛选出来,而无需在MS Excel中逐一打开它们。

有一个类似于我的问题的旧post ,我已经下载了OLE文档查看器 ,但无法打开.zip文件,似乎它已经过期…

有谁知道是否有任何API或工具来检查.xls文件是否包含VBAmacros,而无需在MS Excel中打开它? 首先,我不去了解macros的内容。

PS:对于.xlsx.xlsm文件,我们可以将其文件扩展名更改为包含一些.xml文件的.zip文件,最后将vbaProject.bin文件更改为VBAmacros。 但是,这种方法不适用于.xls文件,重命名它不会生成有效的.zip文件。

下面是我为你烹制的一个简单的Python 2.7解决scheme:

它只依赖于项目页面中可用的OleFileIO_PL模块OleFileparsing器的好处在于它不知道文件的“特定于Excel”的内容; 它只知道更高级别的“OLE存储”。 所以分析文件很快,不存在潜在有害的macros执行的风险。

 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") 

我testing了一些成功的文件。 让我知道,如果它适合你

Interesting Posts