Загрузить файл * .htm, сохраненный в формате .xls (начиная со строки № 5), используя Power Query - PullRequest
0 голосов
/ 05 октября 2018

Мне нужно импортировать файл .xls, который сохраняется как. * Htm,. * Html.Я приложил ссылку, которая предоставляет образец файла этого формата.

Фактическая первая строка таблицы начинается с строки № 5. Но есть данные над ней.

Файл выглядит следующим образом,

Sample File

Файл образца .

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

если над ним нет строк, то следующий код Mпредоставлено Алексис Олсон работает

let
    Source = Folder.Files("C:\Users\aolson\Downloads\example-html.xls"),
    #"Filtered Rows" = Table.SelectRows(Source, each ([Extension] = ".xls")),
    #"C:\Users\aolson\Downloads\example-html xls\_example-html xls" = #"Filtered Rows"{[#"Folder Path"="C:\Users\aolson\Downloads\example-html.xls\",Name="example-html.xls"]}[Content],
    #"Imported Excel" = Web.Page(#"C:\Users\aolson\Downloads\example-html xls\_example-html xls"){0}[Data]
in
    #"Imported Excel"

Когда я добавляю строки в начало образца и нажимаю кнопку Сохранить в Excel - это дает мне предупреждение, хочу ли я продолжить с тем жезатем нажмите «ДА».

Я пытался играть с дочерним столом в редакторе запросов.Но это никуда меня не ведет.

Источник = Таблица не может быть найдена внутри него вообще.

1 Ответ

0 голосов
/ 05 октября 2018

По какой-то причине HTML-код в файле примера содержит несопоставимые теги, которые не нравятся синтаксическому анализатору XML.Вы можете получить данные, хотя с некоторой работой, если вы загрузите их как текст и удалите или исправите любые части, с которыми у парсера возникли проблемы.

Рассмотрите этот код M:

let
    Source = Table.FromColumns({Lines.FromBinary(File.Contents("C:\Users\aolson\Downloads\example-html.xls\example-html.xls"))}),
    #"Kept Range of Rows" = Table.Range(Source,60,22),
    Column1 = Text.Combine(#"Kept Range of Rows"[Column1]),
    #"Parsed XML" = Xml.Tables(Column1),
    Table = #"Parsed XML"{0}[Table],
    #"Expanded td" = Table.ExpandTableColumn(Table, "td", {"i", "b", "span", "Element:Text"}, {"td.i", "td.b", "td.span", "td.Element:Text"}),
    #"Expanded td.span" = Table.ExpandTableColumn(#"Expanded td", "td.span", {"Element:Text", "Attribute:style"}, {"td.span.Element:Text", "td.span.Attribute:style"})
in
    #"Expanded td.span"

Шаги здесь примерно следующие:

  1. Загрузить файл как текст
  2. Выберите только раздел <tbody>.
  3. Объединить эти строки в одно текстовое значение.
  4. Парсит этот текст как XML.
  5. Раскройте все найденные таблицы.

Когда я делал это изначально, я заметил, что тег <b> не был закрыт, поэтому ядобавил </b> в мой исходный файл.

Resulting Table

Результаты немного уродливы, но я подозреваю, что ваши файлы данных не содержатмного форматирования или несовместимая структура таблиц, тогда вы можете получить что-то в этом духе, работающее сносно, особенно если у вас есть только один столбец для работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...