1

我有一大套.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文件。

4

1 回答 1

2

这是我为您准备的一个简单的Python 2.7解决方案:

它只依赖于项目页面中可用的 OleFileIO_PL 模块 OleFile 解析器的好处是它不知道文件的“excel-specific”内容;它只知道更高级别的“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")

我成功地在几个文件上测试了它。让我知道它是否适合你

于 2013-07-10T09:25:01.767 回答