[英]Python 2.7 - win32com.client - Move a worksheet from one workbook to another
我正在嘗試使用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的評論。 我需要移動的工作表名為Charts而不是Sheet1。
我正在回答這些評論,因為它更容易閱讀......
由於該行發生錯誤,問題是WorkbookB.xlsx中沒有“Sheet1”
以下是您可能希望在代碼中更改的一些內容:
您可以使用win32com.client.DispatchEx
創建新的Excel實例,以避免干擾任何打開的Excel實例。 如果您使用DispatchEx
,則可以將設置.Visible
刪除為False
。 關於DispatchEx
進一步閱讀: http : //timgolden.me.uk/python/win32_how_do_i/start-a-new-com-instance.html
\\是一個逃脫角色。 使用原始字符串或正斜杠,例如: wbG=excel.Workbooks.Open(r'C:\\Full Path\\WorkbookB.xlsx')
或wbG=excel.Workbooks.Open('C:/Full Path/WorkbookB.xlsx')
結合這些建議,代碼變為:
from win32com.client import DispatchEx
excel = DispatchEx('Excel.Application')
wbP=excel.Workbooks.Open(r'C:\Full Path\WorkbookA.xlsx')
wbG=excel.Workbooks.Open(r'C:\Full Path\WorkbookB.xlsx')
# note altered sheet name; also .Select is not required
wbG.Worksheets("Charts").Move(Before=wbP.Worksheets("Annual"))
wbP.SaveAs(r'C:\Full Path\WorkbookA.xlsx')
excel.Quit()
del excel # ensure Excel process ends
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.