Python调用WPS将带宏的表格批量转换为普通表格文件(去除表格文件感染的宏病毒)

查看 96|回复 9
作者:MowChan   
功能说明
办公软件的宏病毒是最常见的计算机病毒之一。有些宏病毒不破坏文件本身,而是远程下载、执行恶意程序,感染更多办公文件。清除这类病毒只需删除文件中的宏代码。然而,许多宏病毒会对代码加密,比如删除代码时需要输入密码。此时,将文件另存为 XLSX 等不含宏的普通格式是最佳解决方法,可自动清除宏代码。
以下代码将输入目录下所有含宏的 XLSM 文件自动转换为 XLSX 格式,并保持转换后文件的修改时间与原文件一致。该功能通过 Windows 环境下 Win32 软件的 COM 接口实现批量自动化处理,因此在运行前系统中必须装有 WPS。
Office 同样支持此功能,但其接口命令细节可能略有不同,后续测试完成后将在楼中补充。
运行环境
  • Windows 7 及以上
  • Python 3.7 及以上
  • WPS 2015 及以上

    源代码
    from os import walk, path, stat, utime
    from time import localtime, strftime
    from win32com.client import DispatchEx
    wps = DispatchEx('ket.Application')
    # ket 指金山WPS的电子表格(Kingsoft Et)
    wps.Visible = False
    wps.DisplayAlerts = False
    wps.EnableEvents = False
    # WPS 界面全程静默,并且忽略警告对话框,否则程序会被阻塞
    DIR_PATH = input('输入待转换文件所的目录:').strip()
    for root, dirs, files in walk(DIR_PATH):
        for file in files:
            filename, ext = path.splitext(file)
            ext = ext.lstrip('.').upper()
            if ext == 'XLSM':
                file_path = path.join(root, file)
                file_path_new = file_path.replace('.xlsm', '.xlsx')
                try:
                    workbook = wps.Workbooks.Open(file_path)
                    workbook.SaveAs(file_path_new, FileFormat=51)
                    workbook.Close()
                except:
                    print('文件转换失败:', file_path)
                    print('')               
                else:
                    print('文件转换完毕:', file_path_new)               
                    status = stat(file_path)
                    utime(file_path_new, (status.st_atime, status.st_mtime))
                    # 将转换后表格文件的修改时间改为和原文件相同                  
                    print( '修改日期:', strftime('%Y/%m/%d %H:%M', localtime(status.st_mtime)) )
                    print( '访问日期:', strftime('%Y/%m/%d %H:%M', localtime(status.st_atime)) )
                    print('')
    wps.Application.Quit()
    # 关闭 WPS 进程

    文件, 宏病毒

  • Xianhuagan   

    大神,自己录制的宏也可能带病毒吗?
    xrspook   

    提个建议哈,其实xls文件也是可以带宏的,所以需要转换的文件除了xlsm还有老的xls
    sunson1097   

    我以前运行win32 ,多次运行后,会出现错误文件。后来找了一个临时方法,就是删掉那个出现错误的文件上一级的文件夹。
    gonga   

    谢谢大老的教学,学习了
    1e3e   

    非常 强大啊,谢谢分享呢
    bachelor66   


    sunson1097 发表于 2025-8-18 23:39
    我以前运行win32 ,多次运行后,会出现错误文件。后来找了一个临时方法,就是删掉那个出现错误的文件上一级 ...

    还可以这样操作的。。。                                               
    zhangbice   

    还可以这样操作
    ArpFlooding   

    十分强大,感谢分享!
    pokewin   

    很厉害的分享
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部