从Excel中的单元格运行带参数的web查询

从Excel中的单元格运行带参数的web查询,excel,excel-formula,vba,Excel,Excel Formula,Vba,我试图在更改单元格中的值时执行GET请求 此处的链接: https://www.aviationweather.gov/adds/dataserver_current/httpparam?dataSource=metars&requestType=retrieve&format=xml&stationString=(PARAMETER SHOULD BE HERE)&hoursBeforeNow=1 所以这个单元格中的内容应该改变这个查询。 这可能吗?如果可能的

我试图在更改单元格中的值时执行GET请求

此处的链接:

https://www.aviationweather.gov/adds/dataserver_current/httpparam?dataSource=metars&requestType=retrieve&format=xml&stationString=(PARAMETER SHOULD BE HERE)&hoursBeforeNow=1
所以这个单元格中的内容应该改变这个查询。 这可能吗?如果可能的话,有人有好的解决方案吗? 我整晚都在用谷歌搜索,但似乎找不到做过同样事情的人。

从中调整,这是一个两步过程

首先,为存储要传递给查询的值的单元格创建一个命名范围。有关如何这样做的详细信息如下。我使用“StationName”作为范围的名称,但您可以使用任何您喜欢的名称

其次,我们需要将命名范围合并到查询的源中。为此:

  • 从当前查询中选择数据表中的任意单元格
  • 单击功能区中的“查询”选项卡
  • 点击编辑
  • 查找屏幕右侧的“查询设置”面板-如果没有,请转到“查看”,然后单击“查询设置”
  • “查询设置”面板中的第一个条目应为“源”-单击该条目以选择它
  • 通过转到查看然后检查公式栏,确保显示了公式栏
  • 公式栏中的条目太长,无法显示,因此单击公式栏末端的V符号将其展开
  • 将公式栏文本编辑为如下所示的文本-确保将
    name=“StationName”
    中显示的Excel范围的名称更改为您使用的名称
=Xml.Tables(Web.Contents(“https://www.aviationweather.gov/adds/dataserver_current/httpparam?dataSource=metars&requestType=retrieve&format=xml&stationString=“&Excel.CurrentWorkbook(){[Name=“StationName”]}[Content]{0}[Column1]&”&hoursBeforeNow=1”)

此图显示了现在的情况:

现在转到主页并单击“关闭并加载”

您可能会收到关于隐私设置的警告-为了解决这个问题,我选择将Excel文件和aviationweather.gov网站都设置为“公共”隐私级别

通过选择数据表中的单元格、转到查询并选择编辑、转到主页并选择数据源设置、选择全局权限,然后对相关条目使用编辑权限,可以访问隐私设置

要使查询在单元格值更改时自动刷新,我们需要使用一些VBA。我们需要知道单元格所在的工作表、引用该单元格的命名区域的名称以及要刷新的查询的名称。前两个应该很简单,查询的名称只是“query-”,后跟查询和连接面板中显示的名称

使用ALT-F11打开VBA编辑器,双击项目资源管理器中的相关图纸对象以打开相关代码模块并粘贴以下代码(但更改命名范围的名称和查询的名称以匹配您的名称):

现在,更改单元格值将导致查询自动刷新


下面是一些简单的代码,可以列出工作簿中每个连接的名称。在VBA编辑器中,使用“插入>模块”创建新模块,然后粘贴以下代码:

Option Explicit

Sub listConnections()

Dim c As WorkbookConnection

For Each c In ThisWorkbook.Connections
    MsgBox c.Name
Next c

End Sub
每个连接名称将在消息框中弹出,如下所示:

当它弹出时,你可以复制你需要的名字。只需按CTRL-C键即可复制消息框内容,但粘贴时需要编辑掉一些额外的内容。复制上面显示的消息框会导致将以下文本放置在剪贴板上:

---------------------------
Microsoft Excel
---------------------------
Query - Get station from aviationweather dot gov
---------------------------
OK   
---------------------------

我以这种方式从cbr.ru获取每日汇率数据

“股票代码”]

其中,我将日期用作excel单元格中的变量,以便在单元格值更改时自动刷新。 (将参数命名为Ticker)


希望这个超级简单的方法有帮助。

您好,谢谢您的回复!!这似乎是通往正确方向的途径,但这样做我遇到了一个问题(正如我在谷歌上搜索到的)是ThisWorkbook.Connections(“Myqueryname”)没有定义,或者在错误的工作簿中。这可能是因为Excel中的语言吗?在挪威语中,如果要执行if语句(据我所知不是在VBA中),则必须键入HVIS()而不是if()。我得到的错误是:下标超出范围。你知道这里怎么了吗?它指向的行是调试器中的ThisWorkbook.Connections。我没有意识到查询名称的前缀可能是本地化的。您可以尝试“Spørsmål-”(谷歌建议将其作为“查询”的翻译),后跟您的查询名称。我将用一些代码更新这个问题,列出工作簿中所有连接的名称,这将帮助您找到所需的确切名称,这很好,先生!谢谢你的帮助,我自己永远不会走到这一步。谢谢你,它帮助我做了类似的事情。你如何创建一个“Web查询”类型的新连接?我只能创建一个“OLEDB查询”,参数按钮被禁用。
---------------------------
Microsoft Excel
---------------------------
Query - Get station from aviationweather dot gov
---------------------------
OK   
---------------------------