通过 Power Query 在 Excel 中的 Smartsheet 数据

Posted

技术标签:

【中文标题】通过 Power Query 在 Excel 中的 Smartsheet 数据【英文标题】:Smartsheet data in Excel via Power Query 【发布时间】:2014-12-22 13:02:19 【问题描述】:

Smartsheet 的 API 输出将行和列作为独立的对象返回,它们相互独立。 这会导致列的单独记录(字段名称列表)和行的另一组记录(具有来自各个字段的单个字段值的记录)

有没有办法返回单个 JSON 列表(行和列会产生单个记录列表)?

这是我在查询编辑器中使用的代码,它返回单独的行和列

= Web.Contents(
    "https://api.smartsheet.com/1.1/sheet/[SHEET_ID]",
    [
        Headers = 
        [
            #"Authorization" = "Bearer YOUR_API_TOKEN"
        ]
    ]
)

【问题讨论】:

在相关说明中,我还要指出,弄清楚如何从 PQ 连接到经过身份验证的 REST API 服务并非易事。以下是我的工作方式:(1)在 PQ 编辑器中,我硬编码了身份验证头 + API 令牌:= Web.Contents(“api.smartsheet.com/1.1/sheet/4693183612381060”, [ Headers=[#“Authorization” = “Bearer YOUR_API_TOKEN”]] ) (2) 当提示输入凭据时,我选择了匿名而不是 Web API,正如这里的 cmets 中有人建议的那样 powerpivotblog.nl/… Ivan,您能否举例说明您希望输出的样子? 【参考方案1】:

我使用他们网站上的示例数据提出了这组转换:

let
    Source = Json.Document(File.Contents("D:\testdata\foo.json")),
    ColumnIds = List.Transform(Source[columns], each Text.From([id])),
    ColumnNames = List.Transform(Source[columns], each [title]),
    Table = Table.FromList(Source[rows], Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    Expanded = Table.ExpandRecordColumn(Table, "Column1", "rowNumber", "cells", "rowNumber", "cells"),
    Mapped = Table.TransformColumns(Expanded, "cells",
        each Record.Combine(List.Transform(_, each Record.AddField([], Text.From([columnId]), [value])))),
    Result = Table.ExpandRecordColumn(Mapped, "cells", ColumnIds, ColumnNames)
in
    Result

【讨论】:

以上是关于通过 Power Query 在 Excel 中的 Smartsheet 数据的主要内容,如果未能解决你的问题,请参考以下文章

Power Query Excel 中的覆盖/锁定值

在通过 Python 运行时维护 Excel 工作簿的 Power Query 连接

Excel Power Query:工序产出数据的整合与提取

如何在Power Query中提取数据?——数值篇

循环遍历 Excel Power Query 中的 Json 列表以检索记录

Power Query Editor (Excel) - 错误处理 API 提要中的无数据