JRazor
@JRazor
Senior StarkOverFlow Programmer

Как объеденить кучу Excel файлов в один?

Здравствуйте, уважаемые пользователи Тостера.

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

Вопрос заключается в следующем: объективно ли будет писать данную программу на Python? Если нет, то как можно решить данную проблему проще?

Заранее благодарен всем, кто попытается помочь.
  • Вопрос задан
  • 109696 просмотров
Пригласить эксперта
Ответы на вопрос 3
mirzaiskandarov
@mirzaiskandarov
http://iskandarov.org
Предположим, имеется куча книг Excel, все листы из которых надо объединить в один файл. Копировать руками долго и мучительно, поэтому имеет смысл использовать несложный макрос.

Открываем книгу, куда хотим собрать листы из других файлов, входим в редактор Visual Basic (ALT+F11), добавляем новый пустой модуль (в меню Insert - Module) и копируем туда текст вот такого макроса:

Sub CombineWorkbooks()
Dim FilesToOpen
Dim x As Integer

Application.ScreenUpdating = False 'отключаем обновление экрана для скорости

'вызываем диалог выбора файлов для импорта
FilesToOpen = Application.GetOpenFilename _
(FileFilter:="All files (*.*), *.*", _
MultiSelect:=True, Title:="Files to Merge")

If TypeName(FilesToOpen) = "Boolean" Then
MsgBox "Не выбрано ни одного файла!"
Exit Sub
End If

'проходим по всем выбранным файлам
x = 1
While x <= UBound(FilesToOpen)
Set importWB = Workbooks.Open(Filename:=FilesToOpen(x))
Sheets().Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
importWB.Close savechanges:=False
x = x + 1
Wend

Application.ScreenUpdating = True
End Sub

После этого можно вернуться в Excel и запустить созданный макрос через меню Сервис - Макрос - Макросы (Tools - Macro - Macros) или нажав ALT+F8. Отобразится диалоговое окно открытия файла, где необходимо указать один или несколько (удерживая CTRL или SHIFT) файлов, листы из которых надо добавить к текущей книге.
PE
Ответ написан
@lPolar
data scientist
Как насчет pandas?
Допустим, все файлы лежат в одной папке, и необходимые данные лежат на первом листе, тогда это можно сделать вот так:
import pandas as pd
import os
folder = r'D:\Files\excel' #папка с файлами
files = [os.path.join(folder,f) for f in folder] #формируем список путей к файлам
all_file_frames = [] #сюда будем добавлять прочитанную таблицу 
for f in files:
    print('Reading %s'%f)
    tab = pd.read_excel(f)
    all_file_frames.append(tab)
all_frame = pd.concat(all_file_frames,axis=0) #  axis=0 если нужно добавить таблицу снизу и axis=1 если нужно слева
all_frame.to_excel('final_file.xlsx') #получим файл final_file.xlsx в os.getcwd()
Ответ написан
leahch
@leahch
Я мастер на все руки, я козлик Элек Мэк :-)
Еще предложу посмотреть на Apache POI poi.apache.org/spreadsheet/index.html , который используют для чтения и генерации excel. Написан на java, есть куча примеров по чтению и сознанию xsl-файлов - poi.apache.org/spreadsheet/examples.html
Проект зрелый, активно развивается и используется в куче программного обеспечения -
poi.apache.org/spreadsheet/how-to.html - вопросы/ответы с кодом и ссылками на примеры.
В свое время, 8 лет назад, использовали его для генерации счетов/формуляров.

PS. А вот и пример как это сделать - www.coderanch.com/t/420958/open-source/Copying-she...
Читать всю ветку.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы