Страницы: 1
RSS
Power query игнорировать отсутствие листа
 
Добрый день!
Помогите, пожалуйста, избавиться от ошибки при сборе данных из файлов:
в некоторых файлах нет листа, с которого собираются данные. Так как файлов много, искать и удалять лишние будет долго,
хотелось бы, чтобы Power Query пропускал эти файлы, в идеале - выводил какое-то сообщение в получаемой таблице ("нет листа" и т.п.).

функция:
Код
(filepath)=>
let
    Источник = Excel.Workbook(File.Contents(filepath), null, true),
    #"Срок годности_Sheet" = Источник{[Item="Срок годности",Kind="Sheet"]}[Data],
    #"Повышенные заголовки2" = Table.PromoteHeaders(#"Срок годности_Sheet", [PromoteAllScalars=true])
    in #"Повышенные заголовки2"

запрос:
Код
let
    Источник = Folder.Files(" ........ "),
    #"Сортированные строки" = Table.Sort(Источник,{{"Date modified", Order.Descending}}),
    #"Добавлен пользовательский объект" = Table.AddColumn(#"Сортированные строки", "Index", each Text.Start([Name], 15)),
    #"Удаленные дубликаты" = Table.Distinct(#"Добавлен пользовательский объект", {"Index"}),
    #"Удаленные столбцы" = Table.RemoveColumns(#"Удаленные дубликаты",{"Index"}),
    #"Добавлен пользовательский объект1" = Table.AddColumn(#"Удаленные столбцы", "Пользовательский", each #"Срок годности"([Folder Path]&[Name])),

на следующем шаге появляется ошибка:

    #"Развернутый элемент Пользовательский" = Table.ExpandTableColumn(#"Добавлен пользовательский объект1", "Пользовательский", {"Столбец1", "Столбец2", "Столбец3"}, {"Пользовательский.Столбец1", "Пользовательский.Столбец2", "Пользовательский.Столбец3"}),
    #"Удаленные столбцы1" = Table.RemoveColumns(#"Развернутый элемент Пользовательский",{"Content", "Name", "Extension", "Date accessed", "Date modified", "Date created", "Attributes", "Folder Path"})
in
    #"Удаленные столбцы1"
 
удалите перед "на следующем шаге появляется ошибка:" строки с ошибками
 
Пробовала удалить через "Удалить строки" - "Удалить ошибки", но на следующем шаге все равно возникает ошибка.
Также пробовала в фильтре выбрать "без ошибок" - уже не удается точно воспроизвести - но эффекта нет.

Сверху над строками таблицы красно-белая полоса и последняя строка -в таблице - Error.
Если нажать Error по ссылке появляется желтый инфолог
Код
"В запросе "" произошла ошибка. Expression.Error: Ключу не соответствует ни одна строка в таблице.
Сведения:
    Key=
        Item=Срок годности
        Kind=Sheet
    Table=[Table]
 
нужно смотреть тогда сами файлы
 
Margo_, без примера только подсказка:
try … otherwise #table({},{})
Изменено: surkenny - 15.06.2022 21:51:18
 
surkenny, спасибо за подсказку, поняла принцип но не получается правильно ее применить. Добавила пример во вложении (файл с запросом и папка из которой собираю данные из файлов), можете изменить запрос?
Изменено: Margo_ - 16.06.2022 19:39:06
 
добавляю файлы
Изменено: Margo_ - 21.06.2022 23:36:37
 
Margo_, проверяйте

https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=145473&TITLE_SEO=145473-power-query.-sborka-tablits-iz-raznykh-faylov-s-raznymi-naimenovaniyami-listov.&MID=1172658&_r=3041#message1172658
 
Цитата
без примера только подсказка:
try … otherwise #table({},{})
Получилось обойти ошибку, добавив пустую таблицу:
try Источник{[Item="Лист1",Kind="Sheet"]}[Data] otherwise #table({"№","Дата"},{})

полностью функция:
Код
(filepath)=>
let
    Источник = Excel.Workbook(File.Contents(filepath), null, true),
    Лист1_Sheet = try Источник{[Item="Лист1",Kind="Sheet"]}[Data]
                otherwise #table({"№","Дата"},{}),
    #"Повышенные заголовки" = Table.PromoteHeaders(Лист1_Sheet, [PromoteAllScalars=true]),
    #"Измененный тип" = Table.TransformColumnTypes(#"Повышенные заголовки",{{"№", Int64.Type}, {"Дата", type date}}),
    #"Строки с примененным фильтром" = Table.SelectRows(#"Измененный тип", each ([#"№"] <> null))
in
    #"Строки с примененным фильтром"

Тогда еще вопрос,
если я создаю не пустую таблицу, а с одной строкой, в запросе появляется ошибка:
Код
В запросе "" произошла ошибка. Expression.Error: Столбец "№" таблицы не найден.
Сведения:
    №
Что-то не так в синтаксисе?
В таблице на листах только 2 столбца, "№" и "Дата"
Код
Лист1_Sheet = try Источник{[Item="Лист1",Kind="Sheet"]}[Data]                
              otherwise #table({"№","Дата"},{{"-","-"}}),
файлы прикрепила в предыдущем сообщении.
Заранее благодарю!


 
Margo_, уберите try … otherwise из второго шага функции и добавьте ещё один шаг (или в результат сразу):
Код
in
    try #"Строки с примененным фильтром" otherwise #table ( {}, {} )
Изменено: surkenny - 24.06.2022 07:32:17
Страницы: 1
Наверх