2014-11-14 1 views
3

Я пытаюсь переместить один рабочий лист excel из книги A в книгу B с помощью python 2.7, но я все время получаю сообщение об ошибке. Сценарий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. Рабочий лист, который мне нужен был, был назван «Чарты без листа1».

+0

Это не может быть причиной проблемы, но они должны быть изменены в любом случае : \ является escape-символом. Либо используйте необработанные строки, либо прямые косые черты, например: 'wbG = excel.Workbooks.Open (r'C: \ Full Path \ WorkbookB.xlsx ')' или 'wbG = excel.Workbooks.Open (' C:/Full Path /WorkbookB.xlsx ') ' – bernie

+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

+0

Привет, Берни. Спасибо за эти рекомендации. Я сделал корректировки, которые вы предложили. К сожалению, я все еще получаю ошибку. – Stephanie

ответ

6

Я пишу комментарии в ответ, потому что это легче читать ...

Поскольку ошибка происходит на этой линии оказывается, что проблема заключается в том, что нет «Лист1» в 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. \ is escape символ. Используйте либо сырые строки или вперед-косые черты, например: 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

Привет, как у вас возникает вопрос относительно чего-то подобного этому вопросу. В моем случае мне нужно скопировать информацию с листа 1 в рабочую книгу А, на лист 2 в рабочей книгеБ. Я пытаюсь использовать код, который вы даете Стефани в ее вопросе, но в моем случае создается новый лист в workbookB. Здесь вы можете найти мой вопрос. http://stackoverflow.com/questions/42234155/copying-from-xlsx-to-an-specific-sheet-in-another-xlsx Буду очень благодарен за вашу помощь.Спасибо и извините за плохой английский С уважением, Карлос Арронте. –

+0

@CarlosArronteBello: пожалуйста, задайте еще один вопрос с вашими требованиями. Спасибо. – bernie

+0

Спасибо, я сделаю как можно скорее. Сейчас я не в офисе. Вернется что-то вроде 90 минут. Большое спасибо. –

 Смежные вопросы

  • Нет связанных вопросов^_^