excel - 如何在 Excel Power Query 中动态获取列名
问题描述
我在 Excel 中使用 Power Query 来读取 JSON 文件。我有一个示例工作脚本,如下所示:
let
Source = Json.Document(File.Contents("E:\laureates.json")),
#"Converted to Table" = Record.ToTable(Source),
#"Expanded Value" = Table.ExpandListColumn(#"Converted to Table", "Value"),
#"Expanded Value1" = Table.ExpandRecordColumn(#"Expanded Value", "Value", {"id", "firstname", "surname", "born", "died", "bornCountry", "bornCountryCode", "bornCity", "diedCountry", "diedCountryCode", "diedCity", "gender", "prizes"}, {"Value.id", "Value.firstname", "Value.surname", "Value.born", "Value.died", "Value.bornCountry", "Value.bornCountryCode", "Value.bornCity", "Value.diedCountry", "Value.diedCountryCode", "Value.diedCity", "Value.gender", "Value.prizes"})
in
#"Expanded Value1"
#"Expanded Value1"表达式的第二个和第三个参数具有硬编码的列名称;此代码是通过用户界面生成的。
我想重用脚本。问题是,每当源文件更改时——具有不同的列名或新的列名——我都会遇到错误。一种解决方法是重新生成脚本。
如果我可以将第二个和第三个参数指定为将在运行时动态评估的表达式,我可以避免这个问题。
到目前为止,我的尝试都失败了:我将不胜感激有关如何将第二个和第三个参数替换为代码或表达式的任何提示。
解决方案
我认为您可以使用Record.FieldNames
动态生成该列表。
像这样的东西:
Table.ExpandRecordColumn(
#"Expanded Value",
"Value",
Record.FieldNames([Value]),
List.Transform(Record.FieldNames([Value]), each "Value." & _)
)
编辑:正如 AAsk 指出的那样,上述语法是不正确的,因为它试图在表级操作中提取行上下文。而不是[Value]
每一行,我们需要使用一个有代表性的应用于整个列,并且#"Expanded Value"{0}[Value]
从第一行开始的记录 Picking 应该可以工作。
Table.ExpandRecordColumn(
#"Expanded Value",
"Value",
Record.FieldNames(#"Expanded Value"{0}[Value]),
List.Transform(Record.FieldNames(#"Expanded Value"{0}[Value]), each "Value." & _)
)
List.Transform
有在每个"Value."
列名的开头添加,但使用Record.FieldNames(#"Expanded Value"{0}[Value])
两次就可以了。
推荐阅读
- vue.js - 带有图表组件的 BootstrapVue 轮播除了第一个图表外不会呈现
- excel - 在范围宏的一部分中覆盖任何要复制到 0 的值
- sql - PostgreSQL 查询优化 - 我可以强制在查找表上使用索引吗?
- c# - .NET Core 3.1 - 设计器加载失败 - EntityFramework Core
- excel - VBA:将命名工作表移动到新工作簿并保存
- api - 401 客户端错误:未经授权的 url:https://api.us.onelogin.com/auth/oauth2/v2/tokenth2/v2/token
- java - 处理中的Java:围绕窗口顺时针旋转一个圆圈
- javascript - 在焦点离开元素之前或在下一个元素获得焦点之前是否有运行 jquery 事件?
- apache-spark - pyspark delta-lake 元存储
- python - 将图像转换为numpy数组,翻转数组,然后变成图像