如何用Excel Power Query合并SharePoint中工作簿的table3(部分无该表)?
问题根源
报错的核心原因是部分文件里没有table3,直接尝试访问这个表会触发键不存在的错误——Power Query找不到对应的表名,就会抛出"key was not found"。必须先对每个文件做表存在性检查,再加载目标表。
具体解决步骤
- 先完成SharePoint文档库的文件列表加载(常规操作:数据>获取数据>从SharePoint网站>选择文档库,得到包含文件
Content、名称、路径的表) - 添加自定义列,用来判断并加载
table3,替换下面代码中的之前的表名为你的实际表名:
= Table.AddColumn(之前的表名, "加载table3", each let // 读取当前文件的所有表/工作表 AllTables = Excel.Workbook([Content], null, true), // 筛选出名称为"table3"的表(忽略大小写,避免因大小写不一致漏加载) TargetTable = Table.SelectRows(AllTables, each Text.Equals([Name], "table3", Comparer.OrdinalIgnoreCase)), // 找到则加载表数据,没找到返回空表(空表结构可根据实际table3列调整) LoadedData = if Table.RowCount(TargetTable) > 0 then TargetTable{0}[Data] else #table(type table [列1=type any, 列2=type any], {}) in LoadedData )
- 展开自定义列:点击"加载table3"列的展开按钮,选择需要的列(如果所有
table3列结构一致,直接全选;不一致的话选"将所有列作为文本加载",后续再统一列结构) - 清理冗余列:删除不需要的辅助列(比如原文件的
Content列等)
关键注意事项
- 表名匹配:如果你的实际表名不是
table3,要替换成准确的名称;代码里用了Comparer.OrdinalIgnoreCase忽略大小写,如果你需要严格匹配,删掉这个参数即可 - 空表结构:代码里的空表
#table(type table [列1=type any, 列2=type any], {})最好和真实table3的列结构一致,避免展开时出现列不匹配的错误;如果不确定列结构,也可以用#table({}, {})返回完全空的表 - 性能优化:300+文件建议关闭Power Query的"允许数据预览",或者分批加载,减少卡顿
内容的提问来源于stack exchange,提问作者NewtoPQJay
相关产品推荐
相关产品推荐

