Сборка таблиц из разных файлов Excel с помощью Power Query

Постановка задачи

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

Предположим, что у нас есть вот такая папка, в которой содержится несколько файлов с данными из филиалов-городов:

Файлы для сборки

Количество файлов роли не играет и может меняться в будущем. В каждом файле есть лист с именем Продажи, где расположена таблица с данными:

Данные в книгах

Количество строк (заказов) в таблицах, само-собой, разное, но набор столбцов везде стандартный.

Задача: собрать данные из всех файлов в одну книгу с последующим автоматическим обновлением при добавлении-удалении файлов-городов или строк в таблицах. По итоговой консолидированной таблице затем можно будет строить любые отчеты, сводные таблицы, фильтровать-сортировать данные и т.д. Главное - суметь собрать.

Подбираем оружие

Для решения нам потребуется последняя версия Excel 2016 (в нее нужный функционал уже встроен по умолчанию) или предыдущие версии Excel 2010-2013 с установленной бесплатной надстройкой Power Query от Microsoft (скачать ее можно здесь). Power Query - это супергибкий и супермощный инструмент для загрузки в Excel данных из внешнего мира с последующей их зачисткой и обработкой. Power Query поддерживает практически все существующие источники данных - от текстовых файлов до SQL и даже Facebook :)

Если у вас нет Excel 2013 или 2016, то дальше можно не читать (шучу). В более древних версиях Excel подобную задачу можно реализовать только программированием макроса на Visual Basic (что весьма непросто для начинающих) или монотонным ручным копированием (что долго и порождает ошибки).

Шаг 1. Импортируем один файл как образец

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

  • если у вас Excel 2016, то откройте вкладку Данные и выберите Создать запрос - Из файла - Из книги (Data - New Query- From file - From Excel)
  • если у вас Excel 2010-2013 с установленной надстройкой Power Query, то откройте вкладку Power Query и выберите на ней Из файла - Из книги (From file - From Excel)
Затем в открывшемся окне переходим в нашу папку с отчетами и выбираем любой из файлов-городов (не играет роли какой именно, т.к. они все типовые). Через пару секунд должно появиться окно Навигатор, где нужно в левой части выбрать требуемый нам лист (Продажи), а в правой отобразится его содержимое:

Навигатор Power Query

Если нажать в правом нижнем углу этого окна кнопку Загрузить (Load), то таблица будет сразу импортирована на лист в исходном виде. Для одиночного файла - это хорошо, но нам нужно загрузить много таких файлов, поэтому мы пойдем немного другим путем и жмем кнопку Правка (Edit). После этого должен в отдельном окне отобразиться редактор запросов Power Query с нашими данными из книги:

Редактор запросов Power Query

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

  • отфильтровывать ненужные данные, пустые строки, строки с ошибками
  • сортировать данные по одному или нескольким столбцам
  • избавляться от повторов
  • делить слипшийся текст по столбцам (по разделителям, количеству символов и т.д.)
  • приводить текст в порядок (удалять лишние пробелы, исправлять регистр и т.д.)
  • всячески преобразовывать типы данных (превращать числа как текст в нормальные числа и наоборот)
  • транспонировать (поворачивать) таблицы и разворачивать двумерные кросс-таблицы в плоские
  • добавлять к таблице дополнительные столбцы и использовать в них формулы и функции на встроенном в Power Query языке М.
  • ...

Для примера, давайте добавим к нашей таблице столбец с текстовым названием месяца, чтобы потом проще было строить отчеты сводных таблиц. Для этого щелкните правой кнопкой мыши по заголовку столбца Дата и выберите команду Дублировать столбец (Duplicate Column), а затем щелкните правой кнопкой мыши по заголовку появившегося столбца-дубликата и выберите команды Преобразование - Месяц - Название месяца:

Добавление столбца с месяцем

Должен образоваться новый столбец с текстовыми названиями месяца для каждой строки. Дважды щелкнув по заголовку столбца, его можно переименовать из Копия Дата в более удобное Месяц, например.

Новый столбец
Если в каких-то столбцах программа не совсем корректно распознала тип данных, то ей можно помочь, щелкнув по значку формата в левой части каждого столбца:

Преобразование форматов данных в столбцах

Исключить строки с ошибками или пустые строки, а также ненужных менеджеров или заказчиков можно с помощью простого фильтра:

Фильтрация данных в Power Query

Причем все выполненные преобразования фиксируются в правой панели, где их всегда можно откатить (крестик) или изменить их параметры (шестеренка):

Шаги преобразований

Легко и изящно, не правда ли?

Шаг 2. Преобразуем наш запрос в функцию

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

В редакторе запросов перейдите на вкладку Просмотр и нажмите кнопку Расширенный редактор (View - Advanced Editor). Должно открыться окно, где все наши предыдущие действия будут записаны в виде кода на языке М. Обратите внимание, что в коде жестко прописан путь к файлу, который мы импортировали для примера:

Исходный код

Теперь аккуратно вносим пару правок:

Измененный код

Смысл их прост: первая строка (filepath)=> превращает нашу процедуру в функцию с аргументом filepath, а ниже мы меняем фиксированный путь на значение этой переменной. 

Все. Жмем на Готово и должны увидеть вот это:

Созданная функция

Не пугайтесь, что пропали данные - на самом деле все ОК, все так и должно выглядеть :) Мы успешно создали нашу пользовательскую функцию, где запомнился весь алгоритм импорта и обработки данных без привязки к конкретному файлу. Осталось дать ей более понятное имя (например getData) на панели справа в поле Имя и можно жать Главная - Закрыть и загрузить (Home - Close and Load). Обратите внимание, что в коде жестко прописан путь к файлу, который мы импортировали для примера.. Вы вернетесь в основное окно Microsoft Excel, но справа должна появиться панель с созданным подключением к нашей функции:

Подключение к функции

Шаг 3. Собираем все файлы

Все самое сложное - позади, осталась приятная и легкая часть. Идем на вкладку Данные - Создать запрос - Из файла - Из папки (Data - New Query - From file - From folder) или, если у вас Excel 2010-2013, аналогично на вкладку Power Query. В появившемся окне указываем папку, где лежат все наши исходные файлы-города и жмем ОК. Следующим шагом должно открыться окно, где будут перечислены все найденные в этой папке (и ее подпапках) файлы Excel и детализация по каждому из них:

Импорт всех файлов Excel из заданной папки

Жмем Изменить (Edit) и опять попадаем в знакомое окно редактора запросов.

Теперь нужно добавить к нашей таблице еще один столбец с нашей созданной функцией, которая "вытянет" данные из каждого файла. Для этого идем на вкладку Добавить столбец - Пользовательский столбец (Add Column - Add Custom Column) и в появившемся окне вводим нашу функцию getData, указав для ее в качестве аргумента полный путь к каждому файлу:

Дополнительный столбец

После нажатия на ОК созданный столбец должен добавиться к нашей таблице справа.

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

А теперь "вау-момент" - щелкнем мышью по значку со своенным стрелками в правом верхнем углу добавленного столбца с нашей функцией:

Подгружаем данные в пользовательский столбец

... снимаем флажок Использовать исходное имя столбца как префикс (Use original column name as prefix)и жмем ОК. И наша функция подгрузит и обработает данные из каждого файла, следуя записанному алгоритму и собрав все в общую таблицу:

Собранные данные

Для полной красоты можно еще убрать расширения .xlsx из первого столбца с именами файлов - стандартной заменой на "ничего" (правой кнопкой мыши по заголовку столбца - Заменить) и переименовать этот столбец в Город. А также подправить формат данных в столбце с датой.

Все! Жмем на Главной - Закрыть и загрузить (Home - Close & Load). Все собранные запросом данные по всем городам будут выгружены на текущий лист Excel в формате "умной таблицы":

Собранные данные

Созданное подключение и нашу функцию сборки не нужно никак отдельно сохранять - они сохраняются вместе с текущим файлом обычным образом.

В будущем, при любых изменениях в папке (добавлении-удалении городов) или в файлах (изменение количества строк) достаточно будет щелкнуть правой кнопкой мыши прямо по таблице или по запросу в правой панели и выбрать команду Обновить (Refresh) - Power Query "пересоберет" все данные заново за несколько секунд.

P.S.

Поправка. После январских обновлений 2017 года Power Query научился собирать Excel'евские книги сам, т.е. не нужно больше делать отдельную функцию - это происходит автоматически. Таким образом второй шаг из этой статьи уже не нужен и весь процесс становится заметно проще:

  1. Выбрать Создать запрос - Из файла - Из папки - Выбрать папку - ОК
  2. После появления списка файлов нажать Изменить
  3. В окне редактора запросов развернуть двойной стрелкой столбец Binary и выбрать имя листа, который нужно взять из каждого файла

И все! Песня!

Ссылки по теме



Страницы: 1  2  3  4  
18.12.2019 17:02:47
Как в Power Query при сборе данных из нескольких фаилов сделать чтоб имя фаила стало названием столбца и таблица формировалась из разных фиалов в разные столбцы? В исходном фаиле есть след информация которую нужно вытянуть в таблицу: дата/время/данные/данные/. При формирование отчета через Power Query из нескольких файлов все данные из всех файлов формируются в 5 столбцов: имя файла/дата/время/данные/данные/ и данные из файлов идут друг за другом.
23.12.2019 14:09:37
В экселе столбец  - с датами, после размещения в PQ - даты в текстовом формате и с часами минутами все как было в исходном файле эксель. После назначения в PQ столбцу формат даты - содержимое пропадает. В чем может быть причина?

05.02.2020 10:38:26
Всем добрый день. Задача стоит проще, собрать таблицу, не совсем похожую в разных файлах, в отдельных файлах, в одну книгу на одном листе. Без обновлений информации  и т.п., просто все в кучу, таблица за таблицей подряд. Чтото по данному примеру не получается. Если делать просто запрос из папки и выбрать например пару файлов, т.е. в папке есть всего 2 файла, то при открытие, в первом столбце CONTENT со значениями Binary  нажать  на значок ↓↓ то отображаются данные из этих 2 таблиц корректно, если выбрать больше файлов, то отображение некорректное, все столбцы файлов сливаются в один столбец и разделяются ; . Подскажите что нужно настроить в данном случае? Речь идет об ОФИС 2016. в 2010 с помощью Power Query, получалось, только там  открывается окно перед отображением таблицы и в этом окне выбирается файл из всей кучи в котором больше столбцов и по примеру него собираются всев одну таблицу. Что нужно сделать в 2016 чтобы результат был нужный? Надеюсь объяснил понятно. Спасибо  
27.03.2020 15:32:04
Добрый день!
Собираю, как у вас данные из кучи файлов. Спасибо все работает. Помогите, пожалуйста, нужен двойной фильтр. Но данные не могу предоставить из-за конфиденциальности. Допустим у меня есть колонка тип с цифрами от 1 до 13 и колонка со множеством пользователей. В собираемой таблице в типах 4 и 9 нужно удалить данные пользователей с Null.
У меня удаляется фильтр и остальные типы вообще исчезают. Что я делаю не так?
Спасибо
07.04.2020 10:51:23
Здравствуйте, Николай.
Огромное спасибо за ваши статьи.
Подскажите, пожалуйста, как решить небольшую проблему.
Не могу никак собрать данные, хотя на другом компьютере все получалось без проблем. При загрузке запроса выдаётся сообщение:
"Сбой инициализации источника данных.
Проверьте сервер или обратитесь к администратору данных. Убедитесь, что внешняя база данных доступна, и вновь повторите операцию. При повторении сообщения создайте новый источник для подключения к базе данных."

Все собираемые файлы хранятся на рабочем столе в папке с уникальным названием.  
22.04.2020 21:01:52
Николай, добрый день!
Спасибо за полезные уроки!
У меня проблема - на шаге внесения изменений "Расширенного редактора" выскакивает надпись "Ожидался токен Eof ".
Что это может означать?

Все делаю по инструкции.  
11.06.2020 18:44:10
Добрый день
помогите разобраться.
у меня есть книга, в которой140 листов. на каждом таблица из 6-7 столбцов. 5 столбцов одинаковые, а 1-2 столбца могут присутствовать или отсутствовать на отдельных листах (в средине таблицы).
мне нужно объединить данные из этих листов в один массив, но когда я делаю это с помощью PowerQuery - то столбцы с одинаковым названием не выстраиваются друг под другом.
15.06.2020 12:11:24
Добрый день, Николай

Я очень вас благодарю за ваш труд.
Пример отличный.
Но возникает вопрос:  не могу решить....  Меня множество файлов  во множестве папок.  И у них у всех первые три строки в виде шапки имеют объединение ячеек. Это вызывает ошибку в редакторе запросов  при проведении 1го иди 3го шага
подскажите как обойти сию трудность или  как во множестве файлов Excel поснимать объединение ячеек  внутри файлов, не открывая их.

Благодарю.
26.06.2020 21:35:33
добрый день! Николай, занимаюсь по Вашей книге "Скульптор данных....", столкнулась со следующей проблемой
когда подгружаю в PQ или текстовый файл(из примера в книге) или "загрузка данных через Word" , то таблицы полностью в PQ не подгружаются , всегда пару строк или столбцов остаются за бортом( я уже и обновила excel (у меня2019). какие действия можно предпринять?
25.07.2020 14:47:35
Николай, добрый день! Мои ИТ поставили 2016 Excel. Не могу сказать, есть ли там январские обновления, но binary колонка не раскрывается. Поэтому делаю так, как вы показали с функцией. Вот беда - в итоге колонки (не строки) оказываются отсортированными по алфавиту. То есть не как в оригинале Name, dpt, 1. 2 ...11, 12, а 1, 11. 12...2, Name, dpt
Огорчение. Как быть?
Спасибо!
30.07.2020 12:45:27
Коллеги, добрый день!
Николай, спасибо Вам большое за полезное видео. Всё делал как Вы рассказывали и всё получилось. Но столкнулся с такой проблемой. При обновлении общего файла куда сливаются данные из 70 других файлов, сбивается настройка ширины столбцов и из-за этого очень долго происходит само обновление. (около 20-30 минут. Размер файла 90000 строк на 90 столбцов).

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

Кто-то сталкивался с подобными проблемами? Есть ли какое-то решение или идеи что нажать чтобы всё работало?)

Заранее спасибо за обратную связь!)
 
28.08.2020 15:44:01
Уберите галочку из чек-бокса, как указано на картинке по ссылке.
28.08.2020 12:57:46
Добрый день!
Можно ли с помощью power query объединить несколько книг, состоящих их нескольких листов, так чтоб в новой книге каждый лист суммировался отдельно.  
11.09.2020 08:00:20
Да, вполне можно.
Собираете данные из всех книг в одну таблицу, добавляя колонку с именем листа, а потом по этой колонке выполняете в Power Query группировку (Преобразование - Группировать), чтобы просуммировать данные по каждому листу.
Как-то так :)
09.09.2020 17:34:55
Отличная статья! Хотел бы уточнить момент, она подходит значит для решения такой задачи? Есть папка  которую каждый месяц складывают отчет за месяц, то есть там будет 12 файлов к концу года, в файле каждого месяца есть данные по объектам, которые необходимо автоматически переносить в другой файл отчета, в соответствии с его месяцем. То есть если подвязать функцию к папке то данные автоматом должны переноситься как только в папку копируется новый файл месяца?
11.09.2020 07:59:02
Да, совершенно верно :like:
09.09.2020 21:26:54
Большое спасибо за подобные видео. Это лучший ресурс из тех, что я знаю. Вы очень помогаете!
02.10.2020 14:38:24
Добрый день! А где можно сейчас скачать эту надстройку?
12.10.2020 12:18:59
Здравствуйте.
Подскажите, почему Power Query ругается, когда пытаюсь сделать запрос на загрузку файл формата XLSB из папки?
27.10.2020 14:51:36
Здравствуйте! помогите, пож. Создала книгу с запросами pq в 2013 офисе. Дала коллеге шаблон пользоваться, у него 2016 офис. И запрос не обновляется. Возникает ошибка: "Подключение невозможно обновить. Не удалось определить книгу, которая содержит подключение. Попробуйте обновить подключение через некоторое время." В чем может быть проблема?
30.10.2020 15:54:55
Подскажите пожалуйста , на шаге добавление польз. столбца с использованием функции getData, выходит ошибка "Ошибка выражения: Имя "getData" не распознано. Убедитесь в том, что оно написано верно." синтаксис верный. Версия Excel 2016 Profesional. Обновить нет возможности.
Заранее спасибо.
14.12.2020 14:06:32
Добрый день, спасибо отличная статья. У меня такой вопрос, я собрала таблицы, но теперь я хочу с этой таблицей дальше делать расчеты, мне лучше скопировать данные в другую книгу или на другом листе делать расчеты ссылаясь на эти исходные данные?
21.12.2020 14:58:20
Николай, добрый день

А можно сделать с помощью PQ все тоже самое, но в обратную сторону?

Т.е. у меня есть таблица, я её обрабатываю в PQ, а в итоге нужно "раздербанить" эту таблицу на множество частей (например по критерию "город") в виде отдельных файлов Excel?

Без VBA и PLEX силами PQ это реально сделать?

Спасибо.
28.12.2020 14:54:47
Добрый день, первый раз когда делал все отлично получилось. А теперь такие ошибки, что с этим сделать? Уже несколько раз пересобирала

https://hkar.ru/13CMr
https://hkar.ru/13CMs
28.12.2020 14:59:29
Ответ нашла сама, ошибка глупая, в 2-х книгах не было 2 последних столбцов и одна из неправильных книг шла вторая в папке и после нее ничего не загружалось
28.12.2020 15:00:53
Еще вопрос, изначально когда отредактировали таблицу в PQ, ее можно потом отредактировать, когда поняли, что один столбец не удалили?
19.01.2021 06:44:49
Добрый день!
После обновления Экселя пропала кнопка "Получить данные из файла":(:(:(
Подскажите пжл, как теперь ее найти и вытащить?

Есть подключение к Аксес, Интернету, тексту, другим источникам. А подключение к другой книге excel отсутствует..
02.04.2021 00:48:22
Николай, а можно с помощью Power Query собрать разные по структуре таблицы? а именно, три конкретных столбца (эти столбцы одинаковые во всех таблицах), только они могут располагаться в разных местах в таблицах. Если "Да", то возможно вы поделитесь ссылкой, где можно посмотреть как это сделать
23.03.2023 19:04:54
Добрый день! Подскажите, у вас получилось найти решение?
24.03.2023 10:48:10
Может кому нужно будет, получилось сделать как описано в P.S. статьи, PQ сам распределил данные в соотв. с названиями столбцов, т.е. делаем так:

  1. Выбрать Создать запрос - Из файла - Из папки - Выбрать папку - ОК
  2. После появления списка файлов нажать Изменить
  3. В окне редактора запросов развернуть двойной стрелкой столбец Binary и выбрать имя листа, который нужно взять из каждого файла
Плюс небольшой момент. Если нужны все столбцы, в качестве примера после открытия Binary нужно взять заранее выбранный файл в котором есть все встречающиеся столбцы, ну или можно образец сделать со всеми названиями столбцов, которые могут быть.
20.04.2021 19:59:46
Здравствуйте, а как собрать данные из множества файлов формата csv в формат екселя не на одном листе а на отдельных листах книги. Т.е. все файлы должны быть в одной книге но на разных вкладках (листах). И исходные файлы с расширением csv
Страницы: 1  2  3  4  
Наверх