You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Google Apps Script填充CVE描述遇阻:CVE ID未定义

问题解决:Google Apps Script 获取CVE描述时cveID未定义及函数调用问题

核心问题原因

  1. 错误执行子函数:你直接运行了getCveSummary函数,该函数需要传入cveID参数,直接运行时参数为空,导致日志显示undefined,主函数populateCveSummaries并未被执行。
  2. 数据范围获取不合理:sheet.getRange('A2:A')会获取A列整列(包含大量空行),循环时会读到空单元格的undefined值。

分步解决方案

1. 正确执行主函数

在Google Apps Script编辑器中,点击顶部的函数选择框,选择populateCveSummaries,再点击运行按钮,不要直接运行getCveSummary。

2. 修正数据范围与循环逻辑

修改populateCveSummaries函数,只获取A列有数据的行,避免空行干扰:

function getCveSummary(cveID) {
  var apiUrl = 'https://cve.circl.lu/api/cve/' + cveID;
  try {
    Logger.log('Fetching CVE summary for: ' + cveID);
    var response = UrlFetchApp.fetch(apiUrl);
    var json = JSON.parse(response.getContentText());
    
    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 + ' | Error: ' + e.message);
    return 'Error fetching CVE summary';
  }
}

function populateCveSummaries() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var lastRow = sheet.getLastRow();
  
  // 若A列无数据则直接返回
  if (lastRow < 2) {
    Logger.log('No CVE IDs found in column A');
    return;
  }
  
  // 仅获取A列从第2行到最后一行的有效数据范围
  var dataRange = sheet.getRange(2, 1, lastRow - 1, 1);
  var data = dataRange.getValues();
  
  Logger.log('Data retrieved from Column A: ' + JSON.stringify(data));
  
  for (var i = 0; i < data.length; i++) {
    var cveID = data[i][0];
    var rowNum = i + 2;
    
    Logger.log('Processing row ' + rowNum + ' - CVE ID: ' + cveID);
    
    if (cveID && cveID.trim() !== "") {
      var summary = getCveSummary(cveID);
      Logger.log('Summary fetched for ' + cveID + ': ' + summary);
      
      sheet.getRange(rowNum, 4).setValue(summary);
    } else {
      Logger.log('No valid CVE ID found in row ' + rowNum);
      sheet.getRange(rowNum, 4).clearContent(); // 清空对应D列单元格
    }
  }
}

3. 实现A列输入值时自动触发脚本

添加onEdit触发器函数,当编辑A列单元格时自动获取并填充CVE描述:

function onEdit(e) {
  var sheet = e.source.getActiveSheet();
  var editedCell = e.range;
  
  // 仅当编辑A列(列索引1)、行号≥2且单元格有值时触发
  if (editedCell.getColumn() === 1 && editedCell.getRow() >= 2 && editedCell.getValue()) {
    var cveID = editedCell.getValue().trim();
    var rowNum = editedCell.getRow();
    
    var summary = getCveSummary(cveID);
    sheet.getRange(rowNum, 4).setValue(summary);
  }
}

注意:onEdit是简单触发器,无需手动授权,只要编辑A列就会自动执行。如果后续遇到权限问题,可改为安装式触发器。

4. 安装式触发器设置(可选,应对权限问题)

如果onEdit出现权限错误,按以下步骤设置:

  1. 在脚本编辑器中,点击左侧的「触发器」图标(时钟形状)
  2. 点击「添加触发器」
  3. 选择函数:onEdit
  4. 选择事件类型:「从电子表格」→「编辑时」
  5. 保存并完成授权

内容的提问来源于stack exchange,提问作者Praveen K S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 03:02:14