在 Excel365 中,我尝试构建一个包含一些 POST 数据的查询,并且一切正常,直到我尝试创建来自工作簿中命名单元格的这些值变量。在下面的示例中,我在第二行中成功填充了ApiKey
变量的值,但是当我到达将其添加到列表中的行时,我无法弄清楚如何插入该值。如何指定“ApiKey”是第 5 行“M Language”中的变量,以便它不被解释为字符串,但仍用引号引起来?myContent
let
ApiKey = Excel.CurrentWorkbook(){[Name="ApiKey"]}[Content]{0}[Column1],
BaseURL = "https://www.example.com/api",
myContent = "{
""key"": ""ApiKey"",
""datarequest"": ""all""
}",
myData=Json.Document(myContent),
Source = Json.Document(
Web.Contents(
BaseURL,
[
Headers=[#"Content-Type" = "application/x-www-form-urlencoded"],
Content=Text.ToBinary(Uri.BuildQueryString(myData))
]
)
)
in
Source
如果我像这样将 API 密钥“硬编码”到内容列表中,则一切正常......但我需要它作为我存储的变量的值:
myContent = "{
""key"": ""H5t9sdf7K-FAKEAPIKEY-LHkeQr2"",
""datarequest"": ""all""
}",
我尝试过的事情包括:
myContent = "{
""key"": """&ApiKey&""",
""datarequest"": ""all""
}",
和
myContent = "{
""key"": ""@ApiKey"",
""datarequest"": ""all""
}",
但我从微软找到的文档非常缺乏(从我的角度来看)
不能 100% 确定这会起作用,因为 PQ 中未使用 API 密钥。
使用函数来获取命名范围数据。
我调用了该函数
fGetNamedRange
:将您的命名范围传递到查询中:
再次阅读您的问题并看到您的工作簿参考正在查看 ApiKey 后,请尝试:
将代码片段拆分为不同的查询确实有助于以后进行故障排除,而不是将所有代码都塞进一些超长的聪明的 M 代码中。我针对这种情况的方法是:
在 Excel 中创建一个表,并输入您的 API 密钥。从该表中“获取数据”。在显示 API 密钥值的位置,右键单击并选择“向下钻取”。这会将值转换为一个值,而不是表中的一行或一列。将此查询重命名为“APIKey”。您现在可以像参数一样使用它,但最终用户在 Excel 工作表中更新比编辑 PQ 更容易。
M 代码如下所示:
在您的其他代码中,只需将“APIKey”替换为 APIKey 即可。例如,我有一个测试表,想要过滤“名称”列以查找等于我的 APIKey 值(而不是“APIKey”)的值:
如果您更喜欢使用空格来调用您的值 API Key,那么您需要在其周围加上引号,然后用 # 告诉 PQ 这是值的名称,而不是文字字符串 - [Names] = #"API Key"