Страницы: 1
RSS
После загрузки HTML страницы в Power Query в таблице появляются непонятные символы, после загрузки в таблице появляются символы. Как их убрать?
 
После загрузки HTML страницы в Power Query в таблице появляются непонятные символы
Подскажите пожалуйста может какие кодировки есть чтобы убрать эти символы  
 
Прикладываю файл
 
Попробуйте так:
Код
let
    Источник = Web.Page(Text.FromBinary(File.Contents("E:\СР 1-30.htm"), 1251)){0}[Data]
in
    Источник

Только путь поменяйте на тот что у вас.
Вот горшок пустой, он предмет простой...
 
PooHkrd, подскажите, пожалуйста, как изменить запрос массового импорта тех же html-файлов из папки, чтобы в нем явно указать кодировку?
 
Дайте пару файлов для примера, и образец запроса, которым вы их планируете объединять.
Вот горшок пустой, он предмет простой...
 
Предполагается запрос:
Код
let
    Источник = Folder.Files("D:\1\Kurufin\20. Итальянские имена"),
    #"Строки с примененным фильтром" = Table.SelectRows(Источник, each ([Extension] = ".html")),
    #"Отфильтрованные скрытые файлы1" = Table.SelectRows(#"Строки с примененным фильтром", each [Attributes]?[Hidden]? <> true),
    #"Вызвать настраиваемую функцию1" = Table.AddColumn(#"Отфильтрованные скрытые файлы1", "Преобразовать файл из 20  Итальянские имена", each #"Преобразовать файл из 20  Итальянские имена"([Content])),
    #"Переименованные столбцы1" = Table.RenameColumns(#"Вызвать настраиваемую функцию1", {"Name", "Source.Name"}),
    #"Другие удаленные столбцы1" = Table.SelectColumns(#"Переименованные столбцы1", {"Source.Name", "Преобразовать файл из 20  Итальянские имена"}),
    #"Столбец расширенной таблицы1" = Table.ExpandTableColumn(#"Другие удаленные столбцы1", "Преобразовать файл из 20  Итальянские имена", Table.ColumnNames(#"Преобразовать файл из 20  Итальянские имена"(#"Пример файла"))),
    #"Измененный тип" = Table.TransformColumnTypes(#"Столбец расширенной таблицы1",{{"Source.Name", type text}, {"", type text}, {"Имя", type text}, {"2", type text}, {"Варианты", type text}, {"Уменьш. и краткие формы", type text}, {"���. ����� #(cr)#(lf)(VMR, VHL)", type text}, {"Происхождение", type text}, {"Русская транскрипция", type text}})
in
    #"Измененный тип"
Архив с файлами прилагаю.
Изменено: stacco - 04.09.2019 10:17:42
 
Цитата
stacco написал:
Предполагается запрос:
Это не полный запрос, в нем используется функция #"Преобразовать файл из 20  Итальянские имена", код которой для вас как раз и представляет главный интерес.
Смотрите пример. Путь к папке укажите в параметре ПутьКПапке
Вот горшок пустой, он предмет простой...
 
Спасибо за помощь.
 
Спрошу в этой теме, заголовок подходит, хотя выглядит проблема несколько по другому.


Пытаюсь загружать pdf по инструкции отсюда.
https://www.planetaexcel.ru/techniques/7/5574/
В PQ таблицы выгружаются в гнусном виде.  Тут символы можно через таблицу замены поменять, но это как слишком в обход. К тому же там-сям по тексту еще появляются какие-то знаки = и лишние пробелы.
Н= ;оменклатур = 72;М= ;арка мат.
Коло&#= 1085;каАлюм.<= /span>
Корп&#= 1091;с Алюм.<=   /span>
Пане&#= 1083;ь Алюм.<= /span>
План&#= 1082;а Алюм.<=   /span>
План&#= 1082;а Нержав
При этом в Ворде все выглядит идеально и при простом копировании оттуда копируется нормально выглядящая таблица. Пыталась при сохранении веб-страницы выставлять вручную разные кодировки, и дописывать вручную  Text.FromBinary(....), 1251

Хотелось бы загнать все в PQ, т.к. структура  у всех сканов одинаковая и есть шанс обработать оптом всю папку.
Файл по правилам тут не приложить, может быть, есть заочные рецепты
Изменено: Xel - 09.06.2020 18:34:14
 
Тащите таблицы из docx средствами PQ, я тут функцию такую выкладывал пару раз. Или поищите в Web Archive сайт excelandpowerbi.com там есть подробная статья на ангельском как это делается. Собственно оттуда я функцию и уволок.
Вот горшок пустой, он предмет простой...
 
В Ваших сообщениях  я нашла только ссылку на тот-самый-блог. (по "docx", "word", "ворд")


Функция из блога  работает, и на одном из шагов там видно нужную таблицу в старшном виде.
(надеюсь,ничего плохого нет в том, чтобы целиком ее скопировать из удаленного блога )
Подскажите, пожалуйста, что-где можно добавить, чтобы ее нормально открыть?
Код
let
    Source = File.Contents("C:\example.docx"),
 
    ReplaceTag = (CurrentTag, NewTag, MyText) =>
    let
   // Replace all CurrentTag with NewTag,
   Pos = Text.PositionOf(MyText, CurrentTag),
   EndPos = Text.PositionOf(Text.Range(MyText, Pos),">"),
   NewText = try Text.ReplaceRange(MyText, Pos, EndPos+1, NewTag) otherwise MyText
    in
    if  (Pos = -1) then
       NewText
     else 
       @ReplaceTag(CurrentTag, NewTag, NewText),
 
    // Extract the document.xml from the Word docx file using DecompressZIP approach from previous blog post
 
    MyXML = DecompressFiles(Source, 0, "word/document.xml", ""),
 
    // Convert the output into lines of text
    #"Imported Text" = Table.FromColumns({Lines.FromBinary(MyXML,null,null,1252)}),
 
    // Locate the table XML tags that identify the tabular content within the Word XML and replace with temporary placeholders
 
    ReplaceTableStartTag = Table.ReplaceValue(#"Imported Text","<w:tbl>","||TABLE START||",Replacer.ReplaceText,{"Column1"}),
    ReplaceTableEndTag = Table.ReplaceValue(ReplaceTableStartTag,"</w:tbl>","||TABLE END||",Replacer.ReplaceText,{"Column1"}),
 
    ReplaceRowStartTag = Table.ReplaceValue(ReplaceTableEndTag,"<w:tr>","||ROW START||",Replacer.ReplaceText,{"Column1"}),
    ReplaceRowEndTag = Table.ReplaceValue(ReplaceRowStartTag,"</w:tr>","||ROW END||",Replacer.ReplaceText,{"Column1"}),
 
    ReplaceCellStartTag = Table.ReplaceValue(ReplaceRowEndTag,"<w:tc>","||CELL START||",Replacer.ReplaceText,{"Column1"}),
    ReplaceCellEndTag = Table.ReplaceValue(ReplaceCellStartTag,"</w:tc>","||CELL END||",Replacer.ReplaceText,{"Column1"}),
 
    //Some Row Start tags have attributes and need to be handled using ReplaceTag function
    #"Added Custom" = Table.AddColumn(ReplaceCellEndTag, "Custom", each ReplaceTag("<w:tr ", "||ROW START||", [Column1])),
    #"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Column1"}),
    #"Renamed Columns" = Table.RenameColumns(#"Removed Columns",{{"Custom", "Column1"}}),
 
    //Borrowed code that removes all XML tags
    //https://social.technet.microsoft.com/Forums/en-US/7ec64d6d-c3fc-4110-94c7-2e0087171475/how-to-remove-html-tags-from-a-column?forum=powerquery
 
    ReplaceStr = Table.ReplaceValue(#"Renamed Columns","><",">,<",Replacer.ReplaceText,{"Column1"}),
    ListsCol = Table.AddColumn(ReplaceStr, "ID", each 
               Text.Split(Text.Combine(List.Alternate(Text.SplitAny([Column1],"<>"),1,1,1),","),",")),
    ExpCol = Table.ExpandListColumn(ListsCol, "ID"),
    FilterID = Table.SelectRows(ExpCol, each ([ID] <> "")),
    TheEnd = Table.SelectColumns(FilterID,{"ID"}),
 
    //Now turn our special tags back into regular HTML table tags
 
    aReplaceStr0 = Table.ReplaceValue(TheEnd,"||TABLE START||","<table><tr><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th></tr>",Replacer.ReplaceText,{"ID"}),
    aReplaceStr1 = Table.ReplaceValue(aReplaceStr0,"||TABLE END||","</table>",Replacer.ReplaceText,{"ID"}),
 
    aReplaceStr2 = Table.ReplaceValue(aReplaceStr1,"||ROW START||","<tr>",Replacer.ReplaceText,{"ID"}),
    aReplaceStr3 = Table.ReplaceValue(aReplaceStr2,"||ROW END||","</tr>",Replacer.ReplaceText,{"ID"}),
 
    aReplaceStr4 = Table.ReplaceValue(aReplaceStr3,"||CELL START||","<td>",Replacer.ReplaceText,{"ID"}),
    aReplaceStr5 = Table.ReplaceValue(aReplaceStr4,"||CELL END||","</td>",Replacer.ReplaceText,{"ID"}),
 
    OutputTXT = List.Accumulate(Table.ToList(aReplaceStr5), "", (a,b) => a & b),
 
    // Tell Power Query to parse it as HTML
 
    Output = Web.Page( OutputTXT),
    // Filter to just tables
    #"Filtered Rows" = Table.SelectRows(Output, each ([Source] = "Table")),
 
    // Add an index to number the tables
    #"Added Index" = Table.AddIndexColumn(#"Filtered Rows", "Table No.", 1, 1),
    #"Removed Other Columns" = Table.SelectColumns(#"Added Index",{"Table No.", "Data"}),
    Data = #"Removed Other Columns"{0}[Data],
    #"Promoted Headers" = Table.PromoteHeaders(Data),
    #"Removed Columns1" = Table.RemoveColumns(#"Promoted Headers",{""})
in
    #"Removed Columns1"
Изменено: Xel - 10.06.2020 10:26:36
 
Посмотрите 21 строку в приведенном вами коде. Там можете указать кодировочную страницу 1251 вместо 1252, по идее все должно отображаться корректно.
И блог не удален, просто у автора кончилась регистрации доменного имени и он на него судя по всему забил. А очень жаль. Темы он поднимал очень интересные с практической точки зрения.
Вот горшок пустой, он предмет простой...
 
 Значки похожие на буквы D изменились на P, и в целом кракозябры поменялись, но градус осмысленности остался тем же.
Это шаманство я уже делала, не втыкая смысл, из совета выше по теме.

У самого docx, похоже, нельзя кодировку поменять при сохранении (я вчера меняла туда-сюда у веб-страницы, но эффекта тоже не было)

Вот такой образец
Гальваническое покрытие - Ан.Окс
Изменено: Xel - 10.06.2020 11:11:43
 
А вам не проще тогда сделать отчет в Power BI? Там есть стандартный коннектор к pdf. Можно грузить данные массово из папки. Или хоть приложите пример документа, из которого нужно выцарапать таблицу.
Изменено: PooHkrd - 10.06.2020 11:26:13
Вот горшок пустой, он предмет простой...
 
Но раз речь уже на Word перешла....

BI поставить через доблестных ойти, у которых обновления excel до просто свежей версии 16го  пришлось требовать со скандалем "они же все одинаковые, не мешайте нам работать этими глупостями". :cry:

Документ ручками на коленке, итог тот же - кириллицу мордует, что там ни пиши в 20й строке.
Изменено: Xel - 10.06.2020 11:51:12
 
Попробуйте кодировку с таким номером.
65001
Вот горшок пустой, он предмет простой...
 
Цитата
Xel написал:
доблестных ойти, у которых обновления excel до просто свежей версии 16го  пришлось требовать со скандалем "
Ну, если требования у вас только уровня скандала, то не удивительно :)
Всего делов-по посмотреть на кодировку xml файла и задать, поискав в инете правильное значение. Но, видимо в лом, лишь бы на ИТ бочку покатить :)
Код
    // Convert the output into lines of text
    #"Imported Text" = Table.FromColumns({Lines.FromBinary(MyXML,null,null,65001)}),

И будет вам счастье импорта из Word
 
При желании можно даже автоматизировать подбор идентификатора кодировки в Винде. Смотрим что там написано в той строке, что указал Андрей на скриншоте, потом проверяем соответствие по табличке. И подставляем результат как аргумент функции.
Вот горшок пустой, он предмет простой...
 
Ура, огромное спасибо!
Это колдунство   :)  

Про таблицу даже чуть-чуть поняла, к чему ее прикладывать
 
Цитата
Xel написал:
Это колдунство
До тех пор для вас это будет так, с ИТ не подружитесь.  ;) Это всего лишь знания.
Вот горшок пустой, он предмет простой...
 
И снова о том же вопрос :oops:

Во всех цифрах с запятой эта запятая пропадает в итоге.

В одном из промежуточных шагов то, что в ворде было цифрой  2,06  ,выглядит вот так (на картинке).

И в итоговую таблицу оно выдается как   206.
Все запятые пропадают (из обычного текста, по-моему, тоже все пропадают).

Это исправимо в функции выгрузки, или иначе не работает?
 
Чтобы помочь, нужен файл, на котором воспроизводится проблема. Гаданием по фотографии можно долго заниматься.
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
нужен файл,
Не вопрос :)
 
Xel,  может вместо имеющихся одноименных эти шаги добавите
Код
    ReplaceStr = Table.ReplaceValue(#"Renamed Columns","><","><",Replacer.ReplaceText,{"Column1"}),
    ListsCol = Table.AddColumn(ReplaceStr, "ID", each Text.Split(Text.Combine(List.Alternate(Text.SplitAny([Column1],"<>"),1,1,1),""),"")),
   
И в конце еще шаг с этой формулой
Код
= Table.ReplaceValue(#"Removed Columns1","""","",(a,b,c)=> try Number.From(Text.Replace(a,b,c)) otherwise a,Table.ColumnNames(#"Removed Columns1"))
 
Работает 8-0

Спасибо огромное.

upd
Если в ячейке был текст с запятыми, он остается в кавычках, все содержимое ячейки взято в кавычки. В конкретных моих табличках лечится заменой значения по одному столбцу и приложения разума не требует. Но на всякий случай напишу.
Изменено: Xel - 11.06.2020 09:49:45
 
Добрый вечер, подскажите пожалуйста кто сталкивался - как изначально поменять кодировку при подключении к файлу XML.  
 
Вопрос не по теме.
Страницы: 1
Наверх