我正在 Microsoft 365 的 Excel 中使用 Power Query。
这篇文章是此文的后续:
Power Query:合并现有表列表的子集
下面显示的 Power Query 不是我在上面链接的帖子中最终采用的解决方案,但它确实提出了一个我试图理解的问题。
考虑这个正在工作的 Power Query(直接保存在我的工作簿中):
// Combine the subset of tables Table1, Table2, Table3 that actually exist.
let
remove_errors_f = (input_list as list) as list =>
List.RemoveNulls(
List.Transform(
List.Positions(input_list),
each try input_list{_} otherwise null
)
),
combiner_f = (AccumulatedTable as table, TablesToCombine as list) as table =>
if List.Count(TablesToCombine) = 0 then
AccumulatedTable
else
@combiner_f(Table.Combine({AccumulatedTable, TablesToCombine{0}}), List.RemoveFirstN(TablesToCombine, 1)),
#"MyTables" = remove_errors_f({Table1, Table2, Table3}),
#"All Column Names" = {"Column1", "Column2", "Column3"},
Source = combiner_f(#table(#"All Column Names", {}), #"MyTables"),
#"Source Sorted" = Table.Sort(Source, List.Transform(Table.ColumnNames(Source), each {_, Order.Ascending}))
in
#"Source Sorted"
现在,假设我将此 Power Query 从我的文件中移出.xlsx
,并将其逐个字符逐字移动到名为的文本文件中combine_worksheet_subset.pq
。 (这是为了版本控制。)
然后,我直接在工作簿中创建一个“存根” Power Query 来加载和执行combine_worksheet_subset.pq
:
let
// The source must be an absolute path
Source = Text.FromBinary(File.Contents("C:\my_path\combine_worksheet_subset.pq")),
EvaluatedExpression = Expression.Evaluate(Source, #shared)
in
EvaluatedExpression
只要Table1
、Table2
和全部Table3
存在,此方法就可以正常工作。但是,如果这些表中的任何一个不存在,则此方法会失败。例如,如果我删除Table2
,则会收到以下错误:
为什么这个 Power Query 从外部文件加载时会出现这种失败情况(但不是如果它直接存储在工作簿中)?