使用 CVE 描述填充 Google 表格列时出现问题 - CVE ID 未定义

问题描述 投票:0回答:1
我正在尝试使用 Google Apps 脚本根据 A 列中的 CVE ID 使用相应的 CVE 描述填充 Google 表格的 D 列。我从

https://cve 获取 CVE 描述/摘要。 circl.lu API。但是,当我运行脚本时,遇到 cveID 未定义的问题,并且似乎未正确调用填充摘要的函数 (populateCveSummaries()

)。

这是我当前的脚本:

function getCveSummary(cveID) { var apiUrl = 'https://cve.circl.lu/api/cve/' + cveID; try { Logger.log('Fetching CVE summary for: ' + cveID); // Log the CVE ID var response = UrlFetchApp.fetch(apiUrl); // Fetch data from the API var json = JSON.parse(response.getContentText()); // Parse the JSON response Logger.log('CVE ID used in API call: ' + cveID); // Log the CVE ID for debugging // Check if summary exists, otherwise return a default message if (json && json.summary) { return json.summary; } else { return 'No summary available for this CVE'; } } catch (e) { Logger.log('Error fetching CVE summary for: ' + cveID); // Log the error return 'Error fetching CVE summary'; // Error handling } } function populateCveSummaries() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var dataRange = sheet.getRange('A2:A'); // CVE IDs in column A starting from A2 var data = dataRange.getValues(); // Get the values (CVE IDs) from column A Logger.log('Data retrieved from Column A: ' + JSON.stringify(data)); // Log the raw data from column A for (var i = 0; i < data.length; i++) { var cveID = data[i][0]; // Extract each CVE ID from the 2D array Logger.log('Processing row ' + (i + 2) + ' - CVE ID: ' + cveID); // Log which row is being processed if (cveID && cveID.trim() !== "") { var summary = getCveSummary(cveID); // Fetch the summary for the CVE Logger.log('Summary fetched for ' + cveID + ': ' + summary); // Log the fetched summary sheet.getRange(i + 2, 4).setValue(summary); // Set the summary in column D (index 4) Logger.log('Setting summary for row ' + (i + 2) + ': ' + summary); // Log cell update } else { Logger.log('No valid CVE ID found in row ' + (i + 2)); // Log if no CVE ID is found in a row } } }
当我执行脚本时,cveID 似乎未定义,如执行日志所示。这是我的执行日志的相关部分:

Execution log 11:28:23 AM Notice Execution started 11:28:23 AM Info Fetching CVE summary for: undefined 11:28:23 AM Info CVE ID used in API call: undefined 11:28:24 AM Notice Execution completed
看起来 

populateCveSummaries()

 没有按预期工作,并且 
cveID
 没有填充 A 列中的值。因此,我无法正确获取 CVE 摘要。

我的环境 我正在使用 Google Sheets Apps 脚本。 CVE ID 位于 A 列中,从单元格 A2 开始。 我正在使用公共 API 从 https://cve.circl.lu/api/cve/. 获取 CVE 摘要

屏幕截图 - Google 表格、Circl:

Screenshots - Google Sheets, Circl

我尝试过的

◉我用

Logger.log()

调试,发现
cveID
未定义。
◉函数
populateCveSummaries()
 似乎未正确调用或未按预期循环数据。

我需要什么帮助 ◉为什么即使 A 列中存在值,cveID 仍显示为未定义?
◉如何确保函数
populateCveSummaries()

循环遍历每一行并正确获取数据?
◉关于如何正确设置数据变量或更改范围以获得正确值有什么建议吗?
◉如何在 A 列输入值时自动触发脚本?

Google 表格结构

Google Sheet 的结构是:

A 列:CVE(例如 CVE-2021-24499)

B 列:触发的规则

C 栏:类别

D 列:CVE 描述(我要填充的列)

E 栏:参考资料

F 栏:评论

我是编码新手,任何帮助或建议将不胜感激。

提前谢谢您!

google-sheets google-apps-script google-sheets-api
1个回答
0
投票
您也可以使用普通的 Google Sheets 公式来完成此操作,如下所示:

=let( data, importhtml("https://cve.circl.lu/", "table", 2), ids, choosecols(data, 2), summaries, choosecols(data, 4), arrayformula(xlookup(A2:A, ids, summaries,)) )

让(), 导入html(), 选择cols()并且 xlookup().

© www.soinside.com 2019 - 2024. All rights reserved.