我正在尝试使用 win32com 使用以下代码将多个 xlsx 文件转换为 xls:
import win32com.client
f = r"./input.xlsx"
xl = win32com.client.gencache.EnsureDispatch('Excel.Application')
wb = xl.Workbooks.Open(f)
xl.ActiveWorkbook.SaveAs("./somefile.xls", FileFormat=56)
失败并出现以下错误:
Traceback (most recent call last):
File "xlsx_conv.py", line 6, in <module>
xl.ActiveWorkbook.SaveAs("./somefile.xls", FileFormat=56)
File "C:\python27\lib\site-packages\win32com\gen_py\00020813-0000-0000-C000-000000000046x0x1x9.py", line 46413, in SaveAs
, Local, WorkIdentity)
pywintypes.com_error: (-2147352562, 'Invalid number of parameters.', None, None)
更多细节:
我可以对工作簿执行其他命令,即wb.Worksheets.Add()
and set xl.Visible=True
查看工作簿。甚至做wb.Save()
但不能做wb.SaveAs()
COM 异常是由于缺少文件名参数造成的f = r"./input.xlsx"
找不到。如果您使用 Excel 2013+,您会收到更精确的异常消息,其中错误代码略有不同:
(-2147352567, '发生异常。', (0, 'Microsoft Excel', “抱歉,我们
找不到./input.xlsx。有没有可能是搬家了
重命名还是删除?", 'xlmain11.chm', 0, -2146827284), 无)
虽然您的路径确实在 Python 的本机上下文中工作,指向被调用的 .py 脚本所在的目录,但它不能与外部 API(如 Windows COM)交互,因为需要完整路径。
要解决此问题,请考虑使用Python的内置os
提取脚本的当前目录路径并连接os.path.join()
在 Excel COM 方法中。另外,下面使用try/except/finally
无论是否引发异常,都能在后台正确结束 Excel.exe 进程。
import os
import win32com.client as win32
cd = os.path.dirname(os.path.abspath(__file__))
try:
f = os.path.join(cd, "input.xlsx")
xl = win32.gencache.EnsureDispatch('Excel.Application')
wb = xl.Workbooks.Open(f)
xl.ActiveWorkbook.SaveAs(os.path.join(cd, "input.xls"), FileFormat=56)
wb.Close(True)
except Exception as e:
print(e)
finally:
wb = None
xl = None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)