如何从SharePoint列表仅导入指定ID单行数据至Excel以优化刷新速度
问题背景
现有一个含100列、2700行的在线SharePoint列表作为唯一数据源,需要在Excel中通过ID号获取特定行记录。当前使用Power Query先加载全表再筛选的方式,导致刷新耗时久、文件体积冗余增大,希望实现仅加载目标行以提升效率。
当前冗余查询代码:
Source = SharePoint.Tables("https://XXX.sharepoint.com/sites/XXX", [Implementation=null, ApiVersion=15]), #"xxxxxxxx-xxxx-xxxx-b766-71e3781e9f40" = Source{[Id="xxxxxxxx-xxxx-xxxx-b766-71e3781e9f40"]}[Items], #"Keep relevant row" = Table.SelectRows(#"xxxxxxxx-xxxx-xxxx-b766-71e3781e9f40",each [Id]=relevant number)
解决方案
核心是让SharePoint服务器先执行筛选,仅返回目标行数据,避免全表加载后本地筛选。以下两种方法均可实现:
方法1:直接使用OData.Feed构造筛选请求
通过OData协议直接向SharePoint服务器发送带筛选条件的请求,服务器会提前过滤数据后返回,大幅减少传输量。
替换后的查询代码:
// 替换为你的实际配置 siteUrl = "https://XXX.sharepoint.com/sites/XXX", listName = "你的列表名称", // 可在SharePoint列表设置中查看列表名称 targetId = 123, // 替换为需要获取的记录ID // 构造带筛选条件的OData请求地址 odataRequestUrl = siteUrl & "/_api/web/lists/getbytitle('" & listName & "')/items?$filter=Id eq " & Text.From(targetId), // 加载筛选后的单行数据 Source = OData.Feed(odataRequestUrl, null, [Implementation="2.0"])
方法2:优化原有SharePoint.Tables查询(保留原有数据源入口)
如果希望继续使用SharePoint.Tables,需确保查询折叠功能生效,让筛选逻辑推送到服务器执行:
修改后的查询代码:
Source = SharePoint.Tables("https://XXX.sharepoint.com/sites/XXX", [Implementation=null, ApiVersion=15]), listItems = Source{[Id="xxxxxxxx-xxxx-xxxx-b766-71e3781e9f40"]}[Items], // 筛选操作会被推送到SharePoint服务器执行(需查询折叠生效) targetRow = Table.SelectRows(listItems, each [Id] = relevant number)
验证查询折叠是否生效:查看Power Query编辑器中
targetRow步骤的图标,若为闪电图标则说明服务器端筛选生效;若为表格图标,则表示仍在本地筛选,需检查筛选条件是否符合SharePoint数据源的折叠要求。
效果验证
- 刷新速度:仅传输目标行的100列数据,避免2700行全量加载,刷新耗时显著降低
- 文件体积:不会因加载全表产生冗余数据,文件大小保持合理
内容的提问来源于stack exchange,提问作者Stephane
相关产品推荐
相关产品推荐

