使用 Power Query 从 Excel 缩进中提取层次结构
Posted
技术标签:
【中文标题】使用 Power Query 从 Excel 缩进中提取层次结构【英文标题】:Using Powerquery to extract hierarchy from Excel indent 【发布时间】:2021-07-22 08:33:46 【问题描述】:我正在使用导出.xls
数据文件进行分析的业务应用程序。我想使用 PowerQuery
将这些导入 Excel。
数据有一个层次结构,但它仅由first column
的缩进表示。没有前导零或其他字符。
Powerquery M
似乎没有返回缩进级别的函数。
我发现的其他方法依赖于计算前导零,但这对我不起作用。
在此过程中,我使用 Cell.IndentLevel 属性编写了一个简单的 Excel 自定义函数,效果很好,但我想让 PowerQuery 执行此操作,因此只有一个导入代码。
问:Powerquery 能否访问 Excel 单元格.indentlevel
值?或者它可以执行自定义 Excel 函数吗?我还能如何处理这个问题?
【问题讨论】:
如果文件是 .xlsx 或 .xlsm 文件,它实际上是一个包含多个 xml 文件的 zip 文件。您必须编写一个 PQ 函数来直接访问这些,然后您可以从该信息中整理出样式属性。我认为仅使用您的 Excel 函数会很多更简单,并向您的数据添加一个“帮助列”,将缩进级别转换为层次结构。 【参考方案1】:编辑 - Ron Rosenfield 非常正确地提到这个缩进问题可能是基于 Excel 的,看起来 Power 查询没有缩进处理程序。
这可能是因为 Excel 缩进级别不是数据层次结构的 ISO 方法。
因此,您只需应用一个帮助列,该列将蛮力给出缩进级别,然后电源查询可以处理其余部分。
应该这样做,根据需要进行修改,它将检测并应用一个数字
Sub Macro1()
Dim MyCell As Variant
Range("A:A").Insert
For Each MyCell In Range("A1:A10") 'Change this to be Dynamic
MyCell.Value = MyCell.Offset(, 1).IndentLevel
Next MyCell
End Sub
Oooh 还从外部暂存...“Transform”ETL 的一部分 (Extract、Transform、Load) 嗯,大部分时间缩进由空格处理.
除了 XLS 之外,您还有其他选项吗,因为在 CSV 中缩进的处理方式可能不同。
在不讽刺地命名的 Power Query 功能区的转换选项卡中,您可以通过分隔符空间使用 拆分列。 (除了制表符之外,更常见的缩进分隔符之一。)
这将允许您对数据进行分组,如果还有其他空间会有点混乱,但您可以采取措施来处理它
或者,您可以在“转换”选项卡中使用其他选项,否则您可以使用它,因为没有您要从中导出的系统示例,很难说这是 Excel 缩进还是缩进实际适用。
结果
【讨论】:
OP 声明数据按缩进级别隔离; 不是前导空格。 没有看到 OP 缩进的例子很难处理,通常程序化的缩进是由前导空格或前导制表符完成的,这两者都在 PQ 中处理。因此,如果存在破坏 PQ 的替代方案,那么看看数据的来源会很有趣。 在 Excel 中,IndentLevel 是范围对象的属性。它与制表符或空格无关。 是的,我知道 Excel 在这方面的功能,但是,OP 声明此数据是 ETL"using a business application that exports .xls data files for analysis"
。所以 Excel 可能根本不会将它们作为缩进级别处理。我修改了我的帖子以强调这一点,因为我注意到我假设其他人会知道这一点。
OP 写道,他的工作 VBA 例程正在使用 Cell.IndentLevel
属性以上是关于使用 Power Query 从 Excel 缩进中提取层次结构的主要内容,如果未能解决你的问题,请参考以下文章
Excel 2016 Power Query - 从 Oracle 数据字典中获取数据
如何使用Power Query动态汇总文件夹下多个Excel文件