Порядок столбцов при множественном импорте xlsx

0 голосов
bgack в категории Как сделать...

Добрый день.

Есть набор файлов xlsx (1000 шт.) с одинаковым набором столбцов (50 шт.), в каждом файле порядок следования столбцов разный.

Например:

  • в файле 1 столбцы в таком порядке - A, B, C, D
  • в файле 2 столбцы в таком порядке - С, B, A, D
  • в файле 3 столбцы в таком порядке - D, B, C, A
  • и т.д.

Импортировать сразу все файлы с помощью узла "Импорт/Excel файл" не возможно, т.к. Loginom идентифицирует столбцы при импорте по их позиции, а не по названию столбца в исходном файле xlsx.

Разумеется данную задачу решить ручным перетаскиванием столбцов в 1000 файлов решить не возможно, в связи с этим, подскажите пожалуйста может быть есть какой-то способ решить задачу объединения данных из файлов с одинаковым набором столбцов, но с разным порядком их следования????

P.S. Иначе вся прелесть использования Loginom для построения процессов ETL сводится на нет.

Ответ: 1 шт.

0 голосов
Кирилл М.

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

Алгоритм при этом может быть следующим:
В Loginom необходимо настроить подключение к Excel файлу как к базе данных, см. документацию — https://help.loginom.ru/userguide/integration/connections/list/excel.html.
В сценарий необходимо добавить это подключение как узел (с портом управляющих переменных), а не ссылкой — способ 2 на скриншоте 1. В порт управляющих переменных подключения необходимо передать переменную с путём к Excel-файлу (в настройках узла строка подключения задаётся с помощью переменной). Для этого вам потребуется сформировать список из ваших файлов, которые требуется объединить. Достаточно сформировать список, например, в текстовом документе и импортировать его в сценарий Loginom, либо, используя нашу бесплатную библиотеку компонентов FileAPI Kit — https://marketplace.loginom.ru/libraries/loginom-fileapi-kit, сформировать список с помощью компонента «Список объектов», в котором указать в переменных путь к папке, где располагаются нужные файлы. (Если в папке лежат не только файлы Excel, с помощью компонента «Фильтр» отфильтруйте по расширению xlsx.) Список Excel-файлов необходимо передавать в подключение к MS Excel по одному в качестве переменной. Для этого можно воспользоваться компонентом «Таблица в переменные». Затем добавьте компонент импорта «База данных» — здесь выбирайте требуемые столбцы, можно просто проставить галочки у названий нужных столбцов либо сформировать SQL-запрос. Также важно, чтобы наименования листов были одинаковыми, если будут разные, то их можно передавать в настройки узла в качестве переменной способом, аналогичным для списка Excel-файлов. На данном этапе будет импортироваться только один файл. Для импорта большого количества файлов необходимо логику, описанную ранее, «прогнать» в цикле. Для этого узлы «Таблица в переменные, MS Excel и База данных» сворачиваем в подмодель и на эту подмодель настраиваем узел «Цикл»: вид цикла — групповая обработка, вид групповой обработки — разбиение по уникальным значениям поля с путями к файлам Excel. Соответственно, на вход узла «Цикл» передаётся список файлов. Внутри цикла в каждой итерации будет выполняться импорт одного файла из списка, результаты объединяются по именам полей.

Пример подключения как узла:

Ниже показан пример сценария:


Внутри подмодели "Импорт": 

bgack
Спасибо за ответ, но данный вариант очень громоздкий, все еще осложняется тем, что в xlsx заголовки столбцов начинаются не с первой строки, при этом компонент "MS Excel" не позволяет пропустить N строк в файле перед импортом и в итоге все поля имеют названия F1 ... FN (т.е. тоже зависят от позиции). Для их переименования опять надо городить отдельное решение((
В целом все решалось бы гораздо проще если бы компонент "Excel файл" имел бы возможность выбора способа идентификации столбцов при множественном импорте файлов из папки (1 - по позиции столбца или 2 - по наименованию столбца).
Кирилл М.

Функционал опциональной идентификации столбцов по имени в узле импорта из Excel находится в разработке и появится в одной из будущих версий

bgack
Спасибо, будем очень ждать))
...