Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Выбор файла по дате создания Power Query, Требуется помочь с кодом по Power Query
 
Добрый день!
Есть некая проблема, прошу помочь.
Описание проблемы: В некоторой папке ежедневно автоматически создается 3 новых файла (пример названий: File_otchet_18_01_2018; File_spravka_18_01_2018; File_zadach_18_01_2018),на следующий день создаются 3 новых файла  (пример названий: File_otchet_19_01_2018; File_spravka_19_01_2018; File_zadach_19_01_2018). Требуется взять один последний файл File_spravka_19_01_2018 и вытащить из него таблицу.

Как сформировать запрос в Power Query, чтобы он брал именно таблицу File_spravka_19_01_2018, а на следующий день  File_spravka_20_01_2018?
Проблема в том, что каждый день имя файла меняется (изменяется дата:  File_spravka_19_01_2018,  File_spravka_20_01_2018,  File_spravka_21_01_2018 и т.д.)
Видимо необходим запрос, который говорил бы, что запрашиваемый сайл в название содержит слово "spravka" и файл по послед. дате создания.

Не сильно понимаю в языке программирования М, прошу помощи.  
 
Подгружаете файлы через Данные -Из файла -Из папки. В редакторе запросов сортируете по дате создания или изменения(или по имени) по убыванию. Далее на пересечении заголовков строк и столбца раскрываете список(на значке таблицы) и выбираете "Сохранить верхние строки", указываете - 1. Все, теперь в списке только нужный файл. Дальше делайте с ним, что нужно.
По идее должно получиться что-то вроде:
Код
let
    Источник = Folder.Files("C:\Users\Дмитрий\Desktop\Новая папка"),
    #"Сортированные строки" = Table.Sort(Источник,{{"Date created", Order.Descending}}),
    #"Сохраненные первые строки" = Table.FirstN(#"Сортированные строки",1)
in
    #"Сохраненные первые строки"
Изменено: The_Prist - 18 Янв 2018 12:12:36
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Понимать в языке M тут не нужно, ваша проблема решается исключительно правильной последовательностью нажатия кнопок на ленте редактора запросов.
Алгоритм простой:
1. Делаем запрос к папке
2. Фильтруем список имен файлов по условию "Начинается с ... "File_spravka_"
3. В столбце с именами файлов произведите замену значения "File_spravka_" на ничего
4. В нём же замените символ "_" на точку.
5. Измените тип данных в столбце на тип Дата
6. В фильтре по дате выберите Сегодня/Завтра (см. картинку)

И будет вам счастье.
Если абсолютно уверены, что дата создания файла в атрибутах совпадает с датой в имени файла, то вам потребуются только шаги 1,2,6, только 6 шаг применяйте к столбцу с датой создания файла.
Изменено: PooHkrd - 18 Янв 2018 12:20:55
 
Ну, если всегда нужен только один файл от сегодняшнего числа, то можно сделать и так:
Код
let
    Источник = Excel.Workbook(File.Contents("D:\Download\File_spravka_"&DateTime.ToText(DateTime.LocalNow(),"dd_MM_yyyy")&".xlsx"), null, true),
    Лист1_Sheet = Источник{[Item="Лист1",Kind="Sheet"]}[Data]
in
    Лист1_Sheet

А если хочется, чтобы не залазя в дальнейшем в код, менять дату файла, например посмотреть файл за прошлую неделю, то можно задействовать параметр, куда при обновлении вводить необходимую дату и уже это значение подставлять в обработку.
 
The_Prist, благодарю за вариант, но он не особо подходит, т. к. создаются сразу 3 файла (пример названий: File_otchet_18_01_2018; File_spravka_18_01_2018; File_zadach_18_01_2018), и не факт, что File_spravka_18_01_2018 будет иметь самую позднюю/раннюю дату создания.

PooHkrd, ваш метод прост и отлично подходит!!!  :)  БЛАГОДАРЮ!!!!!

StepanWolkoff, этот метод тоже хорош и имеет место быть!!!

Задача решена. Всем большое спасибо!!!!!!
 
Вариант для тех, кто знает толк в извращениях))
Файлы поместить в одну папку, затем открыть файл "ЗагрузкаСправок" - меняем дату, обновляем "зеленую" табличку)
 
Цитата
f0rester написал:
т. к. создаются сразу 3 файла (пример названий: File_otchet_18_01_2018; File_spravka_18_01_2018; File_zadach_18_01_2018), и не факт, что File_spravka_18_01_2018 будет иметь самую позднюю/раннюю дату создания
Логично. Но видимо у Вас не хватило сил дочитать это(возможно из-за того, что про имена в скобках упомянуто):
Цитата
The_Prist написал:
сортируете по дате создания или изменения(или по имени) по убыванию
в случае указанных Вами имен сортировка прошла бы отлично - Вы просто не захотели попробовать это. Вот, пример такого кода:
Код
let
    Источник = Folder.Files("C:\Users\Дмитрий\Desktop\Новая папка"),
    #"Сортированные строки" = Table.Sort(Источник,{{"Name", Order.Descending}}),
    #"Сохраненные первые строки" = Table.FirstN(#"Сортированные строки",1)
in
    #"Сортированные строки"
В коде остается до/после сортировки просто отфильтровать по нужному названию(справка, отчет - что там надо конкретно) - но это элементарная вроде операция.
Изменено: The_Prist - 18 Янв 2018 14:21:03
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
StepanWolkoff,
Цитата
StepanWolkoff написал:
Ну, если всегда нужен только один файл от сегодняшнего числа, то можно сделать и так:
В коде выдает ошибку: Expression.SyntaxError: Ожидался токен Equal.
 в месте "dd_MM_yyyy"
Код
let
    Источник = Folder.Files("\\10.13.236.6\temp"),
    #"\\10 13 236 6\temp\_Egesutochny_otchet-zadanie_na_PNR_ASU_TP_na_&DateTime.ToText(DateTime.LocalNow(),"dd_MM_yyyy")&"_CTAI_ xlsx" = Источник{[#"Folder Path"="\\10.13.236.6\temp\",Name="Egesutochny_otchet-zadanie_na_PNR_ASU_TP_na_&DateTime.ToText(DateTime.LocalNow()),"dd_MM_yyyy")&"_CTAI_.xlsx"]}[Content],
    #"Импортированные значения Excel" = Excel.Workbook(#"\\10 13 236 6\temp\_Egesutochny_otchet-zadanie_na_PNR_ASU_TP_na_&DateTime.ToText(DateTime.LocalNow()),"dd_MM_yyyy")&"_CTAI_ xlsx")
in
    #"Импортированные значения Excel"
Помогите с решением проблемы.
 
А так ли нужно обижать букву "О", заменяя ее в нике цифрой?
 
Вы как-то странно творчески переработали пример от StepanWolkoff. У него запрос обращается к книге, а у вас к папке.
Если все таки нужно напрямую к файлу, то попробуйте так:
Код
let
    Источник = Excel.Workbook(File.Contents("\\10.13.236.6\temp\Egesutochny_otchet-zadanie_na_PNR_ASU_TP_na_"&DateTime.ToText(DateTime.LocalNow(),"dd_MM_yyyy")&"_CTAI_.xlsx"), null, true),
    Лист1_Sheet = Источник{[Item="Лист1",Kind="Sheet"]}[Data]
in
    Лист1_Sheet
Изменено: PooHkrd - 5 Апр 2018 17:14:12
 
PooHkrd, да все верно. Сработало, спасибо!
 
А вот на замечания от модераторов советую реагировать. А то потом не хорошо может получиться.
Страницы: 1
Читают тему (гостей: 1)