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文件的,两者不兼容导致报错。
要解决这个问题,可以按照以下步骤进行操作:
import openpyxl
和import load_workbook
这两行,因为在该代码中没有使用到这两个库。openpyxl
库的load_workbook
方法打开Excel文件,替代xlApp.Workbooks.Open
的方法。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 方法无效
的问题。