Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python win32com';参数数量无效';_Python_Excel_Win32com - Fatal编程技术网

Python win32com';参数数量无效';

Python win32com';参数数量无效';,python,excel,win32com,Python,Excel,Win32com,我正在尝试使用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) 失败,出现以下错误: Traceb

我正在尝试使用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)
回溯(最近一次呼叫最后一次):
文件“xlsx_conv.py”,第6行,在
xl.ActiveWorkbook.SaveAs(“./somefile.xls”,FileFormat=56)
文件“C:\python27\lib\site packages\win32com\gen_py\00020813-0000-0000-C000-0000000000 46x0x1x9.py”,第46413行,保存为
,本地,工作身份)
pywintypes.com_错误:(-2147352562,“参数数无效”,无,无)
更多详情:


我可以对工作簿执行其他命令,即
wb.Worksheets.Add()
并设置
xl.Visible=True
,以查看工作簿。甚至执行
wb.Save()
,但无法执行
wb.SaveAs()

COM异常是由于缺少文件名参数而导致的,因为
f=r”。/input.xlsx“
。如果您使用Excel 2013+,您将收到更准确的异常消息,错误代码略有不同:

(-2147352567,‘发生异常’,(0,‘Microsoft Excel’,“抱歉,我们 找不到./input.xlsx。是否可能已将其移动, 重命名或删除?,'xlmain11.chm',0,-2146827284),无)

虽然您的路径在指向被调用的.py脚本所在目录的Python本机上下文中工作,但由于需要完整路径,它不需要与外部API(如Windows COM)接口

解析,考虑使用Python的内置<代码> OS>代码>提取脚本的当前目录路径并与Excel COM方法中的<代码> OS.PATION.CONTUNE()/<代码>级联。此外,下面使用

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

我花了相当多的时间寻找一个合适的解决方案,但我唯一发现的是,我昨天写的脚本今天不工作。另外,同样的脚本也可以在其他计算机上运行,所以我想这在windows/MsExcel/Python环境中是有问题的,但我不知道在哪里

我找到了一个解决“SaveAs”问题的方法,就是使用“Save”函数。幸运的是,这仍然有效,不会妨碍我继续我的任务。我希望这有帮助

import win32com.client as win32
from shutil import copyfile

# you need to define these two:
# src, is the absolute path to the excel file you want to open.
# dst, is the where you want to save as the file.

copyfile(src, dst)

excel   = win32.gencache.EnsureDispatch('Excel.Application')
wb      = excel.Workbooks.Open(PATH_DATASET_XLS)
ws      = wb.Worksheets(DATASET_WORKING_SHEET)

# do some stuff
ws.Cells( 1, 'A' ).Value = "hello" 

# Saving changes
wb.Save() # <- this is the work around
excel.Application.Quit()
将win32com.client作为win32导入
从shutil导入复制文件
#您需要定义这两个:
#src是要打开的excel文件的绝对路径。
#dst是要保存为文件的位置。
复制文件(src、dst)
excel=win32.gencache.EnsureDispatch('excel.Application')
wb=excel.Workbooks.Open(路径\数据集\ XLS)
ws=wb.工作表(数据集工作表)
#做点什么
ws.Cells(1,'A').Value=“你好”
#保存更改

wb.Save()#我认为错误消息不完整,而且您是从发布的代码中获得的,您能仔细检查吗?