簡體   English   中英

驗證是否xls文件包含VBA宏而不在MS Excel中打開它

[英]Verifiy if an xls file contains VBA macros without opening it in MS Excel

我有.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")

我在幾個文件上進行了成功測試。 讓我知道它是否適合您

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM