我正在 Microsoft 365 的 Excel 中使用 Power Query。
我有一个 Power Query,其第一步是合并一组表:
let
Source = Table.Combine({One_foo_bar, Two_foo_bar, Three_foo_bar, Four_foo_bar, Five_foo_bar, Six_foo_bar, Seven_foo_bar, Eight_foo_bar}),
// ...
#"Result" = ...
in
#"Result"
问题是并非所有命名的表都存在。任何表的子集都可能存在。那些确实存在的表位于 中ThisWorkbook
。如果缺少任何表,则上面显示的 M 代码将引发错误。
如果模式匹配可以帮助解决这个问题,那么表名都遵循模式*_foo_bar。M 似乎不支持这种类型的模式匹配,但我还是附上了这条声明,以防有人知道一些我不知道的事情,并可以利用这个事实来制定解决方案。
我该如何修改此代码来合并现有的表?
答案1
用作Excel.CurrentWorkbook()
源,然后过滤名称列以仅返回以“_foo_bar”结尾的项目。例如,
let
Source = Excel.CurrentWorkbook(),
#"Filtered Rows" = Table.SelectRows(Source, each Text.EndsWith([Name], "_foo_bar")),
#"Combine Tables" = Table.Combine(#"Filtered Rows"[Content])
in
#"Combine Tables"
答案2
答案3
虽然我已经接受了@DjC 给出的答案,但我会发布一个根据@gns100 给出的建议得出的答案以供将来参考。
let
remove_errors_f = (input_list as list) as list =>
List.RemoveNulls(
List.Transform(
List.Positions(input_list),
each try input_list{_} otherwise null
)
),
#"MyTables" = remove_errors_f({One_foo_bar, Two_foo_bar, Three_foo_bar, Four_foo_bar, Five_foo_bar, Six_foo_bar, Seven_foo_bar, Eight_foo_bar}),
#"Column Names" = {"Column1", "Column2", "Column3", "Column4"},
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)),
Source = combiner_f(#table(#"Column Names", {}), #"MyTables"),
// ...
#"Result" = ...
in
#"Result"