类 Workbooks 的 Open 方法无效

from openpyxl import Workbook
from openpyxl import load_workbook
from win32com import client

def read_excel(filename):

xlApp = client.DispatchEx("Excel.Application")  # 使用独立进程载入Excel
xlApp.DisplayAlerts = False  # 不提示警告
books = xlApp.Workbooks.Open(filename)
books.Save()
# 关闭excel
books.Close()
xlApp.Quit()

read_excel('C:/Users/xiexi/Desktop/1.xlsx')

报错:

Traceback (most recent call last):
File "d:\vscode\python\01保存excel.py", line 22, in
read_excel('C:/Users/xiexi/Desktop/1.xlsx')
File "d:\vscode\python\01保存excel.py", line 12, in read_excel
books = xlApp.Workbooks.Open(filename)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<COMObject >", line 5, in Open
pywintypes.com_error: (-2147352567, '发生意外。', (0, 'Microsoft Excel', '类 Workbooks 的 Open 方法无效', 'xlmain11.chm', 0, -2146827284), None)

打开另一份excel又没问题,两份excel程序名称都是Apache POI

【以下回答由 GPT 生成】

问题分析

根据报错信息可以看出,问题出现在xlApp.Workbooks.Open(filename)这一行代码上,报错信息提示类 Workbooks 的 Open 方法无效。原因是openpyxl库和win32com库属于不同的Excel处理工具,openpyxl是通过open方法打开Excel文件的,而win32com是通过Workbooks.Open方法打开Excel文件的,两者不兼容导致报错。

解决方案

要解决这个问题,可以按照以下步骤进行操作:

  1. 去除import openpyxlimport load_workbook这两行,因为在该代码中没有使用到这两个库。
  2. 使用openpyxl库的load_workbook方法打开Excel文件,替代xlApp.Workbooks.Open的方法。
  3. 修改read_excel函数,将代码改为使用openpyxl库进行Excel文件的读取和保存。

下面是修改后的代码示例:

from openpyxl import load_workbook
from win32com import client

def read_excel(filename):
    xlApp = client.DispatchEx("Excel.Application")  # 使用独立进程载入Excel
    xlApp.DisplayAlerts = False  # 不提示警告
    xlApp.Visible = False  # 隐藏Excel窗口
    try:
        workbook = load_workbook(filename)  # 使用openpyxl库加载Excel文件
        # 在这里进行Excel文件的读取和处理
        # ...
        workbook.save(filename)  # 保存Excel文件
    except Exception as e:
        print(f"读取Excel文件出错: {e}")
    finally:
        # 关闭excel
        xlApp.Quit()

read_excel('C:/Users/xiexi/Desktop/1.xlsx')

通过以上修改,将原本使用win32com库打开Excel文件的代码改为了使用openpyxl库加载Excel文件,并在读取和保存Excel文件时都使用了openpyxl库。这样可以解决类 Workbooks 的 Open 方法无效的问题。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^