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

Power Query中用List.Generate循环调用分页API并合并结果

在Power Query中用List.Generate循环调用分页API并合并结果

核心思路

先调用一次API拿到总页数等元数据,接着用List.Generate生成包含所有分页数据的列表,最后把列表里的所有表格合并成一个完整输出表。

完整实现代码

第一步:定义单页API请求函数

先写一个自定义函数负责获取单页数据,同时返回分页元数据:

let
    GetAPIPage = (pageNumber as number) as record =>
        let
            // 替换成你的API地址,这里假设分页参数是page,每页固定1000条
            APIUrl = "https://your-api-endpoint.com/data?page=" & Text.From(pageNumber) & "&pageSize=1000",
            // 发送HTTP请求并解析JSON
            RawResponse = Web.Contents(APIUrl),
            ParsedResponse = Json.Document(RawResponse),
            // 提取当前页的数据(根据你的API返回结构调整字段名)
            PageTable = Table.FromRecords(ParsedResponse[results]),
            // 提取分页元数据(当前页、总页数,同样按实际结构调整)
            CurrentPageNum = ParsedResponse[currentPage],
            TotalPageCount = ParsedResponse[totalPages]
        in
            // 返回包含数据和元数据的记录
            [PageData=PageTable, CurrentPage=CurrentPageNum, TotalPages=TotalPageCount]
in
    GetAPIPage

第二步:用List.Generate循环获取所有页并合并

let
    // 先获取第一页,拿到总页数
    FirstPage = GetAPIPage(1),
    TotalPages = FirstPage[TotalPages],
    // 用List.Generate生成所有页的数据集
    AllPageResults = List.Generate(
        // 初始状态:当前页1,累积数据是第一页表格,总页数已确定
        () => [CurrentPage=1, AccumulatedTables={FirstPage[PageData]}, TotalPages=TotalPages],
        // 终止条件:当前页不超过总页数就继续
        (state) => state[CurrentPage] <= state[TotalPages],
        // 迭代逻辑:页码+1,把下一页数据追加到累积列表
        (state) => [
            CurrentPage = state[CurrentPage] + 1,
            AccumulatedTables = state[AccumulatedTables] & {GetAPIPage(state[CurrentPage])[PageData]},
            TotalPages = state[TotalPages]
        ],
        // 每次迭代返回当前的累积表格列表
        (state) => state[AccumulatedTables]
    ),
    // 取列表最后一项,就是所有页的表格集合
    FullTableList = List.Last(AllPageResults),
    // 合并所有表格成最终输出表
    FinalCombinedTable = Table.Combine(FullTableList)
in
    FinalCombinedTable

关键部分解释

  • GetAPIPage函数:封装了单页API请求的逻辑,返回的记录既包含当前页数据,也带分页元数据,方便后续判断是否还要继续迭代。
  • List.Generate参数:
    1. 初始状态:设置起始页码为1,累积数据初始化为第一页的表格,同时传入总页数。
    2. 终止条件:当前页码不超过总页数时继续循环。
    3. 迭代逻辑:每次页码加1,调用API获取下一页数据,把新表格追加到累积列表里。
    4. 结果提取:每次迭代返回当前的累积表格列表,最后取列表的最后一项就是完整的所有页数据集合。
  • Table.Combine:把所有分页表格合并成一个统一的大表格,就是最终需要的输出。

注意事项

  • 务必根据你的API实际返回结构调整字段名,比如results、currentPage、totalPages这些字段,要和API返回的JSON结构对应。
  • 可以给GetAPIPage加错误处理,避免某一页请求失败导致整个流程中断,比如把PageTable的代码改成:
PageTable = try Table.FromRecords(ParsedResponse[results]) otherwise Table.FromRecords({})
  • 如果API的分页参数不是page,比如是offset(偏移量),只需要调整APIUrl里的参数即可,比如用offset=(pageNumber-1)*1000来计算偏移量。

内容的提问来源于stack exchange,提问作者Renier Wessels

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 04:30:57