Чи є якась конкретна причина, чому ви хочете зробити це з Python? Excel може зробити більшу частину цього самостійно за допомогою цього макросу VBA:
Sub CombineSheets()
'
' Add three identically-formatted sheets,
' putting the result into a fourth one, and then moving it to a new workbook.
'
Sheets(1).Copy After:=Sheets(3)
Sheets(4).Name = "Combined Counts"
Sheets(2).Select
Cells.Copy
Sheets(4).Select
Range("A1").Select
Selection.PasteSpecial Operation:=xlAdd
Sheets(3).Select
Cells.Copy
Sheets(4).Select
Selection.PasteSpecial Operation:=xlAdd
Sheets(4).Move
End Sub
Це
- Робить повну копію першого аркуша, розміщуючи його після третього аркуша. Новий аркуш може згодом посилатися на
Sheets(4)
. Якщо називається перший аркуш Passenger
, то спочатку буде називатися новий аркуш Passenger (2)
.
- Перейменуйте новий аркуш
Combined Counts
.
- Скопіюйте весь другий аркуш і вставте його на новий аркуш, використовуючи додавання. (Це функція, до якої ви можете отримати інтерактивний доступ за допомогою "Вставити" → "Спеціальна вставка ...", а потім виберіть "Додати" в розділі "Операція".) А потім повторіть з третім аркушем. Нечислові дані (тобто текст) на другому та третьому аркушах ігноруються. Якщо на першому аркуші є текст у певній комірці, цей текст зберігатиметься в результаті, навіть якщо на одному з інших аркушів є номер. (Але це не повинно бути проблемою, оскільки ви кажете, що аркуші однакові за форматом.)
- Відокремте новий робочий аркуш від книги, створивши нову робочу зошит.
Потім можна зберегти нову робочу книжку і закрити її вікно, поставивши щось подібне
Do
fName = Application.GetSaveAsFilename( _
FileFilter:="Excel Workbook (*.xlsx), *.xlsx")
Loop Until fName <> False
ActiveWorkbook.SaveAs Filename:=fName
ActiveWindow.Close
перед End Sub
. Або ви можете отримати ім'я файлу іншим способом.
OpenPyXL
.