Вот функция для загрузки функции из текстового файла и выполнения действия над столбцом. Функция загружается из текстового файла, и входные данные задаются в одном запросе. Это предполагает, что входные переменные определены в двух отдельных запросах (также показано ниже).
Обратите внимание: если вы получили ошибку Formula Firewall, вам нужно будет записать значения именованного диапазона в тот же запрос или изменить параметры запроса, чтобы игнорировать настройки конфиденциальности. Я предпочитаю хранить их отдельно для удобства чтения.
let
//Load M code from text file
Source = Text.FromBinary(File.Contents(p_myTextFilePath)),
//Evaluate the code from the file as an M expression
EvaluatedExpression = Expression.Evaluate(Source, #shared),
//Invoke Function
InvokeFunction = EvaluatedExpression(p_myTableName)
in
InvokeFunction
Запросы для получения значений для использования в качестве пути текстового файла и имени таблицы (в качестве именованных диапазонов).
p_myTableName Query
let
Source = Excel.CurrentWorkbook(){[Name="nr_myTableName"]}[Content],
Column1 = Source{0}[Column1]
in
Column1
p_myTextFilePath Query
let
Source = Excel.CurrentWorkbook(){[Name="nr_myTextFilePath"]}[Content],
Column1 = Source{0}[Column1]
in
Column1
ПЕРЕСМОТР № 1
Ниже приведен синтаксис функции, которая загружает функцию из текстового файла. Имя таблицы является параметром в функции, которая находится в текстовом файле, поэтому, когда вы вызываете функцию ниже, функция из текстового файла появляется, готовая для спецификации таблицы.
(myTextFilePath) =>
let
//Load M code from text file
Source = Text.FromBinary(File.Contents(myTextFilePath)),
//Evaluate the code from the file as an M expression
EvaluatedExpression = Expression.Evaluate(Source, #shared)
in
EvaluatedExpression
Это снимок экрана с приведенной выше функцией до ее вызова.
А вот еще один снимок экрана после вызова функции, готовый к указанию следующего параметра.