簡體   English   中英

Python 2.7 - win32com.client - 將工作表從一個工作簿移動到另一個工作簿

[英]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”

以下是您可能希望在代碼中更改的一些內容:

  1. 您可以使用win32com.client.DispatchEx創建新的Excel實例,以避免干擾任何打開的Excel實例。 如果您使用DispatchEx ,則可以將設置.Visible刪除為False 關於DispatchEx進一步閱讀: http//timgolden.me.uk/python/win32_how_do_i/start-a-new-com-instance.html

  2. \\是一個逃脫角色。 使用原始字符串或正斜杠,例如: 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM