You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:基于Offset分页的REST API数据批量导入Excel PowerQuery实现

PowerQuery 遍历分页REST API全量导入Excel方案

API返回示例

{
  "data": [
    {"id": 1, "name": "Item 1"},
    {"id": 2, "name": "Item 2"}
  ],
  "first": "/api/data?offset=0&limit=200",
  "previous": null,
  "next": "/api/data?offset=200&limit=200",
  "last": "/api/data?offset=1800&limit=200"
}

完整PowerQuery代码

let
    // 替换为你的API根域名
    baseUrl = "https://your-api-domain.com",
    // 封装单页数据拉取逻辑
    getPage = (pageUrl as text) as table =>
        let
            fullUrl = baseUrl & pageUrl,
            // 若需认证,添加Headers参数,示例:Headers=[Authorization="Bearer YOUR_TOKEN"]
            response = Web.Contents(fullUrl),
            jsonResponse = Json.Document(response),
            dataTable = Table.FromRecords(jsonResponse[data])
            // 若需防限流,添加延迟:Function.InvokeAfter(()=>Table.FromRecords(jsonResponse[data]), #duration(0,0,0,1))
        in
            dataTable,
    // 循环生成所有分页数据
    allPages = List.Generate(
        // 初始值:第一页URL和对应数据
        () => [pageUrl = "/api/data?offset=0&limit=200", data = getPage("/api/data?offset=0&limit=200")],
        // 终止条件:没有下一页时停止
        each [pageUrl] <> null,
        // 迭代逻辑:获取当前页的next链接,拉取下一页数据
        each 
            let
                currentResponse = Json.Document(Web.Contents(baseUrl & [pageUrl])),
                nextPage = currentResponse[next]
            in
                [pageUrl = nextPage, data = if nextPage <> null then getPage(nextPage) else null],
        // 提取每一页的数据集
        each [data]
    ),
    // 合并所有分页表格
    combinedTable = Table.Combine(allPages),
    // 可选:根据唯一键去重(替换为你的实际唯一字段)
    removeDuplicates = Table.Distinct(combinedTable, {"id"})
in
    removeDuplicates

关键逻辑说明

  • getPage函数:统一处理单页数据的请求、解析、表格转换,便于复用和维护。
  • List.Generate:PowerQuery的循环生成工具,自动遍历所有分页,直到API返回的next为null。
  • Table.Combine:将所有分页的表格合并为一个完整数据集,直接导入Excel即可。

注意事项

  • 替换baseUrl为你的API实际根地址,初始页URL要和API第一页路径匹配。
  • 若API需要身份验证,在Web.Contents中添加Headers参数,比如Bearer Token。
  • 若API有限流机制,在getPage函数中添加Function.InvokeAfter实现请求延迟,避免被封禁。

内容的提问来源于stack exchange,提问作者Garrett Cross

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 14:52:08