使用Power Query加载另存为.xls的* .htm文件(从第5行开始)

时间:2018-10-05 11:22:16

标签: powerbi powerquery m

我必须导入一个.xls文件,该文件另存为。* htm,。* html。我附加了一个链接,该链接提供了这种格式的示例文件。

表的实际第一行从第5行开始。但是上面有数据。

文件如下所示,

Sample File

sample file

但是请确保在其上面包含一些行以及一些测试值,并使它看起来像上面的屏幕截图。

如果上面没有行,则Alexis Olson提供的以下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中的保存时-它会警告我是否要继续使用相同的格式,然后单击“是”。

我尝试在查询编辑器上使用children表。但这并不能带我去任何地方。

  

来源=根本找不到表。

1 个答案:

答案 0 :(得分:1)

无论出于何种原因,示例文件中的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

结果有点难看,但是我怀疑如果您的实际数据文件没有包含太多格式或不一致的表结构,那么您可以沿这些路线获得良好的工作,特别是如果您只有一列处理。