Перемещение Worsksheet после именного рабочего листа в Excel с помощью Pywin32 Dispatch - PullRequest
0 голосов
/ 07 октября 2018

У меня есть тонны файлов, в которые мне нужно скопировать определенный лист из них в другую рабочую книгу, их нужно поместить после листа с определенным именем, сохраняя при этом все форматирование на перемещаемом листе.

Я видел в другой ветке, что pywin32 будет правильным способом, но мне трудно копировать этот лист "После" указанного листа.

xl = Dispatch("Excel.Application")

xl.Visible = True  
xl.AskToUpdateLinks = False
xl.EnableEvents = False
xl.DisplayAlerts = False

wb1 = xl.Workbooks.Open(Filename=p1)
wb2 = xl.Workbooks.Open(Filename=p2)    
ws1 = wb1.Worksheets("ThisSheet")

##PROBLEM LINE HERE
ws1.Copy(After=wb2.Worksheets("AfterThisSheet"))
##END OF PROBLEM LINE

wb2.Sheets("ThisSheet").Name = "NewNameInNewWorkBook"
wb2.Close(SaveChanges=True)
wb1.Close(SaveChanges=True)

xl.Quit()

Когда я использую "До""вместо" После "эта операция выполнена успешно, но, к сожалению, лист, который я хочу скопировать, заканчивается не в том месте.

Когда я использую «После», это возвращает ошибку.

Я могу использовать другие пакеты в python, такие как pandas, xlrd и т. Д., Но, похоже, у них возникают проблемы с сохранением форматирования без изменений,

Заранее спасибо

1 Ответ

0 голосов
/ 08 октября 2018

На самом деле решение оказалось простым, похоже, что для метода Copy требовалась спецификация для «До» и «После»

##PROBLEM LINE HERE
ws1.Copy(After=wb2.Worksheets("AfterThisSheet"))
##END OF PROBLEM LINE

##CORRECT STATEMENT
ws1.Copy(None, After=wb2.Worksheets("AfterThisSheet"))
##END OF CORRECT STATEMENT

Так что «Нет» следует передать «До»"параметр, прежде чем указывать После.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...