验证xls文件是否包含VBA宏而不在MS Excel中打开它

时间:2013-07-09 14:17:36

标签: excel vba excel-vba binary ole

我有一大堆.xls(Excel 97-2003工作簿)文件。其中一些包含VBA宏,我想找到一种自动过滤它们的方法,而无需在MS Excel中逐个打开它们。

有一个old post与我的问题类似,我已经下载了OLE Doc viewer,但无法打开.zip文件,似乎已经过时了......

有没有人知道是否有任何API或工具可以检查.xls文件是否包含VBA宏而无需在MS Excel中打开它?首先,我不想知道宏的内容。

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

1 个答案:

答案 0 :(得分:1)

以下是我为您烹饪的简单Python 2.7解决方案:

它仅取决于可用的from the project page 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")

我在几个文件上成功测试了它。如果它适合你,请告诉我