AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题 / 1812768
Accepted
techtheatre
techtheatre
Asked: 2023-10-16 11:35:55 +0800 CST2023-10-16 11:35:55 +0800 CST 2023-10-16 11:35:55 +0800 CST

如何在M语言PowerQuery中包含变量

  • 772

在 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""
        }",

但我从微软找到的文档非常缺乏(从我的角度来看)

microsoft-excel
  • 2 2 个回答
  • 53 Views

2 个回答

  • Voted
  1. Best Answer
    Darren Bartrup-Cook
    2023-10-16T21:29:36+08:002023-10-16T21:29:36+08:00

    不能 100% 确定这会起作用,因为 PQ 中未使用 API 密钥。

    使用函数来获取命名范围数据。
    我调用了该函数fGetNamedRange:

    let GetNamedRange=(NamedRange) => 
        let
            name = Excel.CurrentWorkbook(){[Name=NamedRange]}[Content],
            value = name{0}[Column1]
        in
            value
    in GetNamedRange  
    

    将您的命名范围传递到查询中:

    let
        myContent = "{
            ""key"": """ & Text.From(fGetNamedRange("MyNamedRange")) & """,
            ""datarequest"": ""all""
            }"
    
    in
        myContent
    

    在此输入图像描述

    再次阅读您的问题并看到您的工作簿参考正在查看 ApiKey 后,请尝试:

    let
        ApiKey = Excel.CurrentWorkbook(){[Name="ApiKey"]}[Content]{0}[Column1],
        BaseURL = "https://www.example.com/api",
        myContent = "{
            ""key"": """ & Text.From(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
    
    • 1
  2. AdamV
    2023-10-16T22:05:41+08:002023-10-16T22:05:41+08:00

    将代码片段拆分为不同的查询确实有助于以后进行故障排除,而不是将所有代码都塞进一些超长的聪明的 M 代码中。我针对这种情况的方法是:

    在 Excel 中创建一个表,并输入您的 API 密钥。从该表中“获取数据”。在显示 API 密钥值的位置,右键单击并选择“向下钻取”。这会将值转换为一个值,而不是表中的一行或一列。将此查询重命名为“APIKey”。您现在可以像参数一样使用它,但最终用户在 Excel 工作表中更新比编辑 PQ 更容易。

    M 代码如下所示:

    let
    Source = Excel.CurrentWorkbook(){[Name="ParametersTable"]}[Content],
    #"Filtered Rows" = Table.SelectRows(Source, each [Name] = "API Key"),
    Value = #"Filtered Rows"{0}[Value]
    in 
    Value
    

    在您的其他代码中,只需将“APIKey”替换为 APIKey 即可。例如,我有一个测试表,想要过滤“名称”​​列以查找等于我的 APIKey 值(而不是“APIKey”)的值:

    let
    Source = Excel.CurrentWorkbook(){[Name="TestTable"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Names", type text}, {"Test", type text}}),
    #"Filtered Rows" = Table.SelectRows(#"Changed Type", each [Names] = APIKey) 
    in 
    #"Filtered Rows"
    

    如果您更喜欢使用空格来调用您的值 API Key,那么您需要在其周围加上引号,然后用 # 告诉 PQ 这是值的名称,而不是文字字符串 - [Names] = #"API Key"

    • 0

相关问题

  • 带有“和”运算符的 Excel 数据透视表

  • 如何对整列使用 Excel 的 LENGTH 函数?

  • Excel 数组(2 个变量)

  • 如何从 WSL 打开 office 文件

  • VBA根据文件名重命名工作表

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何减少“vmmem”进程的消耗?

    • 11 个回答
  • Marko Smith

    从 Microsoft Stream 下载视频

    • 4 个回答
  • Marko Smith

    Google Chrome DevTools 无法解析 SourceMap:chrome-extension

    • 6 个回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Martin Hope
    Vickel Firefox 不再允许粘贴到 WhatsApp 网页中? 2023-08-18 05:04:35 +0800 CST
  • Martin Hope
    Saaru Lindestøkke 为什么使用 Python 的 tar 库时 tar.xz 文件比 macOS tar 小 15 倍? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh 如何减少“vmmem”进程的消耗? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Windows 10 搜索未加载,显示空白窗口 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve