Страницы: 1
RSS
[Power Query] Получаем числовые форматы ячеек из файла Excel при помощи Power Query, есть такая функция
 
В продолжение вот этой темы.

Как известно, Power Query берет из листа Excel только значения, все форматы (кроме формата даты) идут мимо.
То есть, например, если у вас значение ячейки A1 = 1000, при этом при помощи форматирования вы задали денежный формат с отображением знака $, а в соседней ячейке A2 у вас тоже 1000, только с отображением знака €, то для Power Query это два абсолютно одинаковых числа.

Стандартных средств для того, чтобы достать примененный формат ячейки при помощи PQ нет.
Если вы можете добраться до файла при помощи VBA или проставить нужные метки формата руками - вам повезло. Однако если такая история случается с большим количеством файлов (выгрузки из учетных систем, например), то придется уже повозиться. А если файлы хранятся где-то на веб-сервере, то их нужно сначала скачать, затем... ну вы поняли.

В общем, вот вторая готовая функция из проекта "Excel Formats to Power Query" - Excel.GetNumberFormats

Текущая версия 1.1.1 работает с одним (указанным явно по имени) листом и одним (первым или заданным по номеру как аргумент) столбцом, и в качестве результата возвращает данные с нужного листа с добавлением перед ними специального столбца, содержащего форматы ячеек.

То есть, из вот такого листа:


который при стандартной загрузке становится вот таким:


получаем вот такой вывод:

Далее уже полученные форматы можно парсить так, как душа пожелает.

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

Как пользоваться:

  1. Копируем код
  2. Создаем пустой запрос в PQ
  3. В редакторе заменяем код на скопированный -> получаем функцию.
  4. Скармливаем функции четыре (минимум два) параметра:
  5. Полный путь к файлу (включая имя файла) xlsx или xlsm (например, "C:\PQ\test.xlsm")
  6. Имя листа (например, "Лист2"), который хотим получить.
  7. необязательно Номер столбца (например, 1 или 5 - в соответствии с нотацией R1C1, то есть столбец А = 1, а столбец E = 5). По умолчанию 1, т.е. первый столбец, он же А.
  8. необязательно Параметр true/false - хотим ли, чтобы столбец с форматами был добавлен первым столбцом к данным, полученным с листа. По умолчанию true.
  9. Радуемся.
Последний параметр определяет, что мы получаем в дополнение к стандартному выводу функции Excel.Workbook:
  1. false: таблица из двух столбцов: rowIndex (0-based номер строки) и NumberFormat (собственно форматы ячеек)
  2. true/null/опущен: таблица, содержащая исходные данные из столбца Data, к которой первым столбцом (ColumnN.NumberFormat) прицеплены форматы.
Если не хотим копировать целиком код и пр. - можно использовать всегда свежую версию функции при помощи следующей строки:
Код
Expression.Evaluate(Text.FromBinary(Web.Contents("https://github.com/hohlick/Power-Query-Excel-Formats/blob/master/NumberFormats/Excel.GetNumberFormats.pq")), #shared)
В планах: добавление возможности импорта форматов сразу из нескольких листов (т.е. для каждого из заданных листов) и из нескольких столбцов (списком или ссылкой "как в Excel").
F1 творит чудеса
 
Подскажите, можно ли эту функцию перенастроить на вывод цвета ячейки? если да то что в ней поправить?
Страницы: 1
Наверх