【发布时间】:2014-11-14 17:40:07
【问题描述】:
我正在尝试使用 python 2.7 将一个 Excel 工作表从工作簿 A 移动到工作簿 B,但我不断收到错误消息。
Python 脚本:
import win32com.client
excel=win32com.client.Dispatch('Excel.Application')
excel.Visible=False
wbP=excel.Workbooks.Open('C:\Full Path\WorkbookA.xlsx')
wbG=excel.Workbooks.Open('C:\Full Path\WorkbookB.xlsx')
wbG.Worksheets("Sheet1").Select
wbG.Worksheets("Sheet1").Move(before=wbP.Worksheets("Annual"))
wbP.SaveAs('C:\Full Path\WorkbookA.xlsx')
excel.Application.Quit()
我收到的错误:
Traceback (most recent call last):
File "C:\Full Path\test.py", line 10, in <module>
wbG.Worksheets("Sheet1").Select
File "C:\Python27\lib\site-packages\win32com\gen_py\00020813-0000-0000-C000-000000000046x0x1x8\Sheets.py", line 120, in __call__
ret = self._oleobj_.InvokeTypes(0, LCID, 2, (9, 0), ((12, 1),),Index
com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2147352565), None)
谢谢!
解决方案:
参见 bernie 的 cmets。我需要移动的工作表名为 Charts 而不是 Sheet1。
【问题讨论】:
-
这可能不是问题的原因,但无论如何都应该更改:\ 是转义字符。使用原始字符串或正斜杠,例如:
wbG=excel.Workbooks.Open(r'C:\Full Path\WorkbookB.xlsx')或wbG=excel.Workbooks.Open('C:/Full Path/WorkbookB.xlsx') -
您也可以使用
win32com.client.DispatchEx创建一个新的 Excel 实例,以避免干扰任何打开的 Excel 实例。如果您使用DispatchEx,您可以将.Visible设置为False。进一步阅读DispatchEx:timgolden.me.uk/python/win32_how_do_i/… -
你好,伯尼。谢谢你的建议。我做了你建议的调整。不幸的是,我仍然收到错误消息。
-
该行出现的错误表明 WorkbookB.xlsx 中没有“Sheet1”
-
是的...我已将 Sheet1 的名称更改为 Charts。谢谢伯尼!
标签: python python-2.7 excel win32com vba