使用win32.com复制Excel工作表会引发Microsoft Excel复制粘贴错误

问题描述 投票:0回答:1

[当我使用win32.com打开Excel文件并将工作表粘贴到另一个Excel文件时,出现复制粘贴错误。

import win32com.client
import os

excel = win32com.client.Dispatch("Excel.Application")

w = excel.Workbooks.Open(os.path.join(os.getcwd(), "my_excel_file.xlsx"))

w.Sheets.Copy(wb.Sheets(1))

wb.SaveAs(os.path.join(os.getcwd(), "new_excel_file.xlsx"))
excel.Application.Quit()

这是我得到的错误:

pywintypes.com_error:(-2147352567,'发生异常。',(0,'Microsoft Excel','Excel无法将工作表插入目标工作簿,因为它包含的行和列少于源工作簿。要移动或将数据复制到目标工作簿中,可以选择数据,然后使用“复制和粘贴”命令将其插入到另一个工作簿的表中。','xlmain11.chm',0,-2146827284),无)]

python-3.x win32com excel-automation
1个回答
0
投票

我能够重现您的错误,但这不是来自您提交的代码。我更改了原始代码以重现该错误。此外,缺少诸如“ wb”变量未定义之类的信息,但您的问题是Excel问题,与python或Windows COM库无关。以下错误代码段描述了什么是excel错误,下面的资源说明了如何获取该错误。

'Excel cannot insert the sheets into the destination workbook, because it 
contains fewer rows and columns than the source workbook. To move or copy 
the data to the destination workbook, you can select the data, and then use 
the Copy and Paste commands to insert it into the sheets of another workbook'

总而言之,如果您使用Microsoft Excel 2003版本并尝试将其保存到2007版本中,这是一个问题。

仅将"wb.Sheets.Copy(w.Sheets(1))"设置为"w.Sheets.Copy(wb.Sheets(1))"将解决您的问题。参见下面的代码:

import win32com.client
import os

try:
    excel = win32com.client.Dispatch("Excel.Application")
    wb = excel.Workbooks.Add()
    w = excel.Workbooks.Open(os.path.join(os.getcwd(), "my_excel_file.xlsx"))
    w.Sheets.Copy(wb.Sheets(1))
    wb.SaveAs(os.path.join(os.getcwd(), "new_excel_file.xlsx"))
finally:
    # Release resources
    wb = None
    w = None
    excel.Application.Quit()
© www.soinside.com 2019 - 2024. All rights reserved.