2014-11-14 62 views
3

我試圖將一個Excel工作表從工作簿A移動到Python 2.7的工作簿B,但我不斷收到錯誤。Python 2.7 - win32com.client - 將工作表從一個工作簿移動到另一個工作簿

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 not Sheet1。

+0

這可能不是問題的原因,但無論如何都應該被改變:\是一個轉義字符。使用原始字符串或正斜槓,例如:'wbG = excel.Workbooks.Open(r'C:\ Full Path \ WorkbookB.xlsx')'或'wbG = excel.Workbooks.Open('C:/ Full Path /WorkbookB.xlsx')' – bernie 2014-11-14 17:45:18

+0

您也可以使用'win32com.client.DispatchEx'創建Excel的新實例,以避免干擾任何打開的Excel實例。如果您使用'DispatchEx',則可以將'.Visible'設置爲'False'。進一步閱讀關於'DispatchEx':http://timgolden.me.uk/python/win32_how_do_i/start-a-new-com-instance.html – bernie 2014-11-14 17:59:57

+0

嗨伯尼。感謝您提供這些建議。我做了你所建議的調整。不幸的是我仍然收到錯誤。 – Stephanie 2014-11-14 18:33:08

回答

6

我寫的評論起來的答案,因爲它更易於閱讀...

由於在該行發生錯誤出現的問題是,有沒有「工作表Sheet1」在WorkbookB.xlsx

以下是你可能想在代碼中改變一些東西:

  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 
+0

你好,我如何對這個問題有類似的問題。 在我的情況下,我需要將信息從工作簿A中的工作表1複製到工作簿B中的工作表2。我嘗試在你的問題中使用你給斯蒂芬妮的代碼,但在我的案例中是在工作簿B中創建一個新工作表。 你可以在這裏找到我的問題。 http://stackoverflow.com/questions/42234155/copying-from-xlsx-to-an-specific-sheet-in-another-xlsx 我會很感激你的幫助。感謝和抱歉,英語不好 Regards, Carlos Arronte。 – 2017-02-22 22:03:44

+0

@CarlosArronteBello:請繼續問你的要求另一個問題。謝謝。 – bernie 2017-02-22 22:13:27

+0

謝謝,我會盡快完成。我現在不在辦公室。會回來像90分鐘。非常感謝你。 – 2017-02-22 22:46:17

相關問題