Power Query中如何通过表格单元格的CVE值调用API并将结果写入对应列
Power Query中如何通过表格单元格的CVE值调用API并将结果写入对应列
嗨Dean,刚上手Power Query遇到这种批量API调用的问题太正常了,我来一步步教你实现需求:
步骤1:确保你的CVE表格已加载到Power Query
先把包含CVE列的表格导入到Power Query编辑器里(比如从Excel导入后点击「数据」选项卡的「从表格/范围」),假设这个表格在Power Query里的名称是CVE_Table。
步骤2:创建调用API的自定义函数
我们需要先写一个能接收CVE值、调用API并返回EPSS结果的自定义函数:
- 在Power Query编辑器顶部点击「主页」→「自定义函数」,给函数起个名字(比如
GetEPSSFromCVE),参数名设为cve(类型选文本)。 - 把默认的函数体替换成以下代码:
(cve as text) => let // 拼接API请求URL,将传入的CVE值作为参数 API_URL = "https://api.first.org/data/v1/epss?cve=" & cve, // 发送API请求并获取响应内容 API_Response = Web.Contents(API_URL), // 解析JSON格式的响应 Parsed_Response = Json.Document(API_Response), // 提取EPSS值(适配API返回的结构,若CVE不存在则返回null避免报错) EPSS_Result = try Parsed_Response[data]{0}[epss] otherwise null in EPSS_Result
小提示:如果API返回的结构有变化,你可以先单独调用一次API(比如用
Web.Contents("https://api.first.org/data/v1/epss?cve=CVE-2023-33228")),解析后查看JSON结构,调整提取路径。
步骤3:将函数应用到CVE列,生成EPSS结果
回到你的CVE表格:
- 点击「添加列」→「自定义列」,列名输入
EPSS。 - 在自定义列公式框里输入:
= GetEPSSFromCVE([CVE]),点击确定。
此时Power Query会自动遍历表格里的每一个CVE值,调用API并把结果填充到新的EPSS列里。
注意事项
- 如果遇到权限相关的报错,你可以在Power Query编辑器里点击「文件」→「选项和设置」→「数据源设置」,找到对应的API地址,调整隐私级别为「公开」。
- 注意API的调用速率限制,避免短时间内发送大量请求导致被限制访问。
备注:内容来源于stack exchange,提问作者Dean C




