Привет. Импортирую файлы из папки. Если по одному, то название сохраняется в названии листа, но если импортировать сразу все файлы, то не могу вставить название в таблицу, т.е ячейку Количество заменить на название Таблицы/Запроса. Подобное рассматривалось здесь Сборка таблиц из разных файлов Excel с помощью Power Query но я так и не понял, что сделать, изменить в расширенных настройках.
ваш код не работает при подстановке в него приложенного текстового файла. что надо сделать - до сих пор не ясно. ссылка приводит на описание как сделать пользовательскую функцию - зачем? картинка в последнем вашем сообщении не открывается.
ПС: через образец навряд ли тут будет кто-то делать, смысла в этом нет никакого, и если вы знаете PQ, чтобы вытащить нужные данные из html, то использовать образец совсем странно. Напишите словами, что надо сделать + если ваш код вытаскивает данные из html, то сделайте, чтобы он работал на отдельно взятом текстовом файле. Вместо образца - как вариант подключитесь к папке, загрузите все объекты в папке в виде таблицы и через пользовательский столбец вытащите из каждого файла нужный текст, потом разверните все вложенные таблицы.
let
f=(x)=>[a=Text.FromBinary(x),
=====> здесь Ваш код <===========
][#"Повышенные заголовки"],
file=Folder.Files(fParam("Path")),
sel=Table.SelectRows(file,(x)=>x[Extension]=".txt" and not Text.Contains(x[Name],"~"))[[Name],[Content]],
tr=Table.TransformColumns(sel,{"Content",f}),
nms=List.Distinct(List.Combine(List.Transform(tr[Content],(x)=>Table.ColumnNames(x)))),
to=Table.ExpandTableColumn(tr,"Content",nms)
in
to
Спасибо! Это было бы красивым решением, но файлы в папках имеют цифровые имена (99, 100, 1001.txt...) Power Query название определяет по заголовку <h4><u>"Пшеница твердая, зерно"</u>.</h4> каким образом код
let f=(x)=>Table.ToList(Html.Table(bin,{g(x)})), g=(x)=>{"Column"&x,"TABLE.table.table-border.tc-chemical-table >*>TR>:nth-child("&x&")"}, bin = File.Contents("C:\--СВОЙ-ПУТЬ-К-ФАЙЛУ.txt"), lst = List.Transform(List.Skip(f("2")),(x)=>Value.FromText(Text.Split(x," "){0},"en")), to = #table(f("1"),{{Table.FirstValue(Web.Page(bin))}&lst}) in to
neurologkhv написал: Куда вставить Text.BetweenDelimiters
ваш код для обработки html на моем компе не работает - старый PQ - вставьте весь свой код обработки - вместе с let и in - в шаге "код_обработки_HTML" , заменив источники в шагах этого кода на соотв-е поле с вложенными файлами, и у вас в столбце "код_обработки_HTML" должны появиться ваши таблицы - разверните их затем + ваши разделители "<h4>" и ".</h4>" неправильные - подберите правильные сами в шаге TextBetweenDelimiters
Скрытый текст
Код
let
Источник = Folder.Files(" ВАШ ПУТЬ К ПАПКЕ С ТЕКСТОВЫМИ ФАЙЛАМИ"),
код_обработки_HTML = Table.AddColumn(Источник, "код_обработки_HTML", each Html.Table([Content], {{"Column1", "TABLE.table.table-border.tc-chemical-table > * > TR > :nth-child(1)"}, {"Column2", "TABLE.table.table-border.tc-chemical-table > * > TR > :nth-child(2)"}, {"Column3", "TABLE.table.table-border.tc-chemical-table > * > TR > :nth-child(3)"}, {"Column4", "TABLE.table.table-border.tc-chemical-table > * > TR > :nth-child(4)"}, {"Column5", "TABLE.table.table-border.tc-chemical-table > * > TR > :nth-child(5)"}, {"Column6", "TABLE.table.table-border.tc-chemical-table > * > TR > :nth-child(6)"}}, [RowSelector="TABLE.table.table-border.tc-chemical-table > * > TR"])),
текстHTML_из_файла = Table.AddColumn(код_обработки_HTML, "текстHTML_из_файла", each Text.FromBinary([Content])),
TextBetweenDelimiters = Table.AddColumn(текстHTML_из_файла, "TextBetweenDelimiters", each Text.BetweenDelimiters([текстHTML_из_файла], "<h4><u>", "</u>.</h4>")),
удал_др_столбцы = Table.SelectColumns(TextBetweenDelimiters,{"код_обработки_HTML", "TextBetweenDelimiters"})
in
удал_др_столбцы
let f=(y,x)=>Table.ToList(Html.Table(y,{g(x)})), g=(x)=>{"Column"&x,"TABLE.table.table-border.tc-chemical-table >*>TR>:nth-child("&x&")"}, h=(y)=>[a=List.Transform(List.Skip(f(y,"2")),(x)=>Value.FromText(Text.Split(x," "){0},"en")), b=#table(f(y,"1"),{{Table.FirstValue(Web.Page(y))}&a})][b], to = Table.Combine(List.Transform(Folder.Files("C:\--ПУТЬ-К-ПАПКЕ--\test")[Content],h)) in to