Я пытался преобразовать макрос-код VBA в мощный запрос, но теперь он застрял.У меня есть папка, которая может иметь до 4 файлов.3 с расширением .dat и 1 с расширением .txt.Чего я хочу добиться - это загрузить все файлы с расширением .dat на разные листы.Я испробовал два подхода.
Подход один - Все в одном запросе
1) Получить все файлы в папке
GetFiles = Folder.Files("FolderPath"),
2) Фильтрфайлы с расширением .dat
FilterFiles = Table.SelectRows(GetFiles, each ([Extension] = ".dat")),
3) Добавьте столбец, который объединяет filePath & fileName
BuildFilePath = Table.AddColumn(FilterFiles, "FilePath", each [Folder Path] & [Name]),
4) Проверьте, какие из 3 файлов доступны
Tab1 = Table.SelectRows(BuildFilePath , each Text.Contains([Name], "Tab1")),
Tab2 = Table.SelectRows(BuildFilePath , each Text.Contains([Name], "Tab2")),
Tab3 = Table.SelectRows(BuildFilePath , each Text.Contains([Name], "Tab3")),
HasTab1 = Table.RowCount(Tab1),
Tab1Content = if HasTab1 > 0 then Csv.Document(File.Contents(Tab1[FilePath]{0}), null, "~") else "",
HasTab2 = Table.RowCount(Tab2),
Tab2Content = if HasTab2 > 0 then Csv.Document(File.Contents(Tab2[FilePath]{0}), null, "~") else "",
HasTab3 = Table.RowCount(Tab3),
Tab3Content = if HasTab3 > 0 then Csv.Document(File.Contents(Tab3[FilePath]{0}), null, "~") else "",
Для этого подхода у меня есть содержимое файла, загруженное как шаг запроса, но я все еще не знаю, как вывести его на разные листы.
Подход два - модульные, отдельные файлы для отдельныхвещи
1) Query GetFiles
AllFiles = Folder.Files(FolderPath)
2) Query FilterFiles
AllFiles = GetFiles,
FilterFiles = Table.SelectRows(AllFiles, each ([Extension] = ".dat"))
3) Query BuildFilePath
FilteredFiles = FilterFiles,
BuildFilePath = Table.AddColumn(FilteredFiles, "FilePath", each [Folder Path] & [Name])
4) Query FileExists
FileExists = (TabName, FileTable) =>
let
TabRow = Table.SelectRows(FileTable, each Text.Contains([Name], TabName)),
RowCount = Table.RowCount(TabRow),
HasFile = if RowCount > 0 then TabRow[FilePath]{0} else "false"
in
HasFile
5) Запрос LoadTab1
Source = BuildFilePath,
FilePath = FileExists("Tab1", BuildFilePath),
LoadFile = if FilePath <> "false" then Csv.Document(File.Contents(FilePath), null, "~") else ""
На этом шаге я получаю сообщение об ошибке
Formula.Firewall: Запрос 'LoadTab1' (шаг 'LoadFile)') ссылается на другие запросы или шаги, поэтому может не иметь прямого доступа к источнику данных.Пожалуйста, перестройте эту комбинацию данных.
Также я просто хочу загрузить файлы, а не промежуточные таблицы
Любая помощь будет оценена.