В моей книге Excel у меня есть три отдельные таблицы. Электронные таблицы идентичны по формату и представляют значения подсчета для различных категорий (легковые автомобили, грузовики и т.д.). Мне нужно объединить электронные таблицы следующим образом и создать новую рабочую книгу с объединенными данными (CombinedCount.xlsx):

= 'Passenger'!B3+«Тяжелый грузовик»!B3+«Легкий грузовик»!B3

Есть много ячеек, которые нужно сложить вместе, и этот код будет применяться к большому количеству книг с одинаковым форматом. Есть ли способ автоматизировать этот процесс с помощью некоторого кода Python?

2 ответа2

0

Есть ли какая-то конкретная причина, почему вы хотите сделать это с 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 .  Или вы можете получить имя файла другим способом.

0

Я бы использовал Power Query Add-In для этой задачи. Он может импортировать все или выбранные файлы из папки и построить таблицу, объединяющую данные из каждого файла (при условии, что они имеют стандартную компоновку, как вы указали). Например:

http://www.excelguru.ca/blog/2013/11/26/from-txt-files-to-bi-solution/

Power Query также имеет функцию Group By, которая может суммировать данные и объединять их, например, Count, Count Distinct, Sum, Average и т.д.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .