.png)
В моей книге Excel есть три отдельные таблицы. Таблицы идентичны по формату и представляют собой значения количества для разных категорий (легковые автомобили, грузовики и т. д.). Мне нужно объединить таблицы следующим образом и создать новую книгу с объединенными данными (CombinedCount.xlsx):
='Пассажирский'!B3+'Тяжелый грузовик'!B3+'Легкий грузовик'!B3
Нужно сложить много ячеек, и этот код будет применен к большому количеству рабочих книг с точно таким же форматом. Есть ли способ автоматизировать этот процесс с помощью кода Python?
решение1
Есть ли какая-то особая причина, по которой вы хотите сделать это с помощью 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
. Или вы можете получить имя файла другим способом.
решение2
Я бы использовал надстройку Power Query для этой задачи. Она может импортировать все или выбранные файлы из папки и построить таблицу, объединяющую данные из каждого файла (предполагая, что они имеют стандартную структуру, как вы указали). Например:
http://www.excelguru.ca/blog/2013/11/26/from-txt-files-to-bi-solution/
Power Query также имеет функцию Group By, которая может суммировать данные и агрегировать их, например, количество, количество различных значений, сумма, среднее значение и т. д.