Страницы: 1
RSS
Подсчет количества файлов в папке с помощью PQ, В папке содержится некое кол-во файлов и необходимо произвести их подсчет и если спереди имени файла стоит цифра то увеличивать счетчик на эту цифру
 
Доброго дня!

Имеется папка с файлами (может быть различного формата и имени) и с помощью PQ необходимо произвести подсчет кол-ва файлов, но с особенностью: если в имени файла спереди содержится какая либо цифра то увеличиваем счетчик на это число, а не на 1 как с обычными без этого числа спереди. Например если имя файла файл.xlsx то его в счетчике считаем как 1, а если имя файла 5_файл.xlsx, то увеличиваем счетчик на 5. Это надо реализовать с помощью Power Query.

Спасибо!
Изменено: kaa700 - 05.04.2019 16:06:54
 
Примерно так:
Код
= List.Sum( List.Transform( Folder.Files("E:\1")[Name], each let a = Text.BeforeDelimiter(_, "_") in if a = _ then 1 else Number.From(a) ) )

Путь только к папке свой вставьте.
Вот горшок пустой, он предмет простой...
 
kaa700, у вас не просьба о помощи, а заказ
 
artyrH, это почему Вы так решили?  
 
kaa700, а Вы не видите просьбу в описании?
 
PooHkrd, Спасибо! А это сделали путем добавления пользовательского столбца и имя листа List и столбец Sum?  
 
kaa700, нет, создаете пустой запрос, после чего в строку формул вставляете мою формулу. Либо заходите в расширенный редактор, все стираете и вставляете мою формулу, но без знака "=" в начале. Если принципиально сделать запрос в кнопочном режиме, то вот так:
Код
let
    Источник = Folder.Files("E:\1"),
    #"Добавлен пользовательский объект" = Table.AddColumn(Источник, "Пользовательская", each let a = Text.BeforeDelimiter([Name], "_") in if a = [Name] then 1 else Number.From(a)),
    #"Вычисленная сумма" = List.Sum(#"Добавлен пользовательский объект"[Пользовательская])
in
    #"Вычисленная сумма"

Здесь только формулу для вычисляемого столбца нужно руками написать.
Изменено: PooHkrd - 05.04.2019 11:31:13
Вот горшок пустой, он предмет простой...
 
PooHkrd, огромное спасибо! Пишет ошибку Имя "Text.BeforeDelimiter " не распознано. Убедитесь в том, что оно написано верно.
 
kaa700, у вас что за Excel? 10/13/16?
Вот горшок пустой, он предмет простой...
 
PooHkrd,10
 
Тогда в доп столбец такую формулу:
Код
= try Number.From( Text.Start([Name], Text.PositionOf([Name], "_") ) ) otherwise 1

В вашей версии такой функции нет, и вряд ли уже появится. MS на обновление надстройки для старых версий подзабил.
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
вряд ли уже появится
почему же.. у меня на Excel 2010 работает все, что вы предложили ранее
 
Значит надо все таки обновить надстройку. Просто на днях помогал еще одному персонажу с 2010 и там была та же беда.
Изменено: PooHkrd - 05.04.2019 12:12:24
Вот горшок пустой, он предмет простой...
 
artyrH, сможете сбросить файл с запросом который получился на 10 и работает... Спасибо!
 
PooHkrd, спасибо для 2016 все работает. Но проблема в том если в имени файла встречается больше одного символа "_" то пишет что невозможно преобразовать в Number если к примеру в другом файле в имени файл_номер.xlsx то пишет что ошибка. Нужно чтобы брал только первый левый символ "_".
 
kaa700, какой пример, такое и решение. Приготовьте пример, который более полно отображает все шаблоны наименований файлов, и опишите логику как эти наименования интерпретировать. Но направление решения я вам показал.
Изменено: PooHkrd - 05.04.2019 15:58:40
Вот горшок пустой, он предмет простой...
 
прошу помощи уже по измененному варианту...
 
И как вот эти названия учитывать? файл_2_номер, файл копия_1 Как единички?
Вот горшок пустой, он предмет простой...
 
PooHkrd, да. Не 1 только те в которых в имени файла вначале стоит число, т.е. только такие: Число_имя файл  
 
Я же вам дал формулу в посте №11 для добавления столбца. С ней все отлично считает.
Вот горшок пустой, он предмет простой...
 
PooHkrd, спасибо! так формулу в посте #11 сделать вместо той о которой писали выше?
 
Да:
Код
let
    Источник = Folder.Files("E:\1"),
    #"Добавлен пользовательский объект" = Table.AddColumn(Источник, "Пользовательская", each try Number.From( Text.Start([Name], Text.PositionOf([Name], "_") ) ) otherwise 1),
    #"Вычисленная сумма" = List.Sum(#"Добавлен пользовательский объект"[Пользовательская])
in
    #"Вычисленная сумма"
Изменено: PooHkrd - 08.04.2019 10:32:54
Вот горшок пустой, он предмет простой...
Страницы: 1
Наверх