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

修改Google Apps Script实现Sheet数据更新/追加功能

修改后的Google Apps Script脚本(支持Code匹配替换/追加)

原脚本可将JSON数据追加到Google Sheet最后一行,现优化为以下逻辑:

  • 检查JSON数据中Code字段(对应Sheet的B列)
  • 若Sheet中已存在相同Code值,替换对应整行数据
  • 若不存在,将数据追加至Sheet末尾
function doPost(request = {}) {
  const { parameter, postData: { contents, type } = {} } = request;
  const { dataReq = [], fname = '' } = JSON.parse(contents);

  const response = {
    status: "function not found: " + fname,
    data2: dataReq
  }
  
  let output;
  switch (fname) {
    case 'pasteData':
      output = JSON.stringify(pasteData(dataReq));
      break;
    default:
      output = JSON.stringify(response);
      break;
  }
  return ContentService.createTextOutput(output).setMimeType(ContentService.MimeType.JSON);
}

function pasteData(dataReq) {
  const id = '1_27rjNQmlXrwVKpLWUbGrJYPJufGRa7Dk-XEKcNAHr0';
  const sheet = SpreadsheetApp.openById(id).getSheetByName('Sheet1');
  const headings = sheet.getDataRange().getValues()[0];
  // 获取Code列的索引(B列对应数组索引1)
  const codeColIndex = headings.indexOf('Code');
  if (codeColIndex === -1) {
    return 'Error: Sheet中未找到"Code"表头';
  }

  // 构建现有Code与行号的映射表(跳过表头行)
  const allData = sheet.getDataRange().getValues();
  const codeRowMap = new Map();
  for (let i = 1; i < allData.length; i++) {
    const code = allData[i][codeColIndex];
    if (code) {
      codeRowMap.set(code, i + 1); // 行号从1开始计数
    }
  }

  let updateCount = 0;
  const newRows = [];

  // 逐个处理传入的JSON数据项
  dataReq.forEach(item => {
    // 将数据项转换为对应表头的行数据
    const rowData = headings.map(heading => item[heading] || '');
    const itemCode = rowData[codeColIndex];

    if (!itemCode) {
      // 无Code值的数据直接追加
      newRows.push(rowData);
      return;
    }

    if (codeRowMap.has(itemCode)) {
      // 匹配到现有Code,替换对应行
      const targetRow = codeRowMap.get(itemCode);
      sheet.getRange(targetRow, 1, 1, rowData.length).setValues([rowData]);
      updateCount++;
    } else {
      // 无匹配Code,加入待追加列表
      newRows.push(rowData);
    }
  });

  // 批量追加新数据
  if (newRows.length > 0) {
    const startRow = sheet.getLastRow() + 1;
    sheet.getRange(startRow, 1, newRows.length, newRows[0].length).setValues(newRows);
  }

  return `更新行数:${updateCount},追加行数:${newRows.length}`;
}

关键改动说明

  • 新增codeRowMap映射表,一次性读取现有Code与行号的对应关系,避免重复遍历Sheet提升效率
  • 单独处理每个数据项,根据Code匹配结果执行替换或追加操作
  • 增加表头合法性检查,若Sheet无"Code"表头直接返回错误提示
  • 修正原函数名拼写不一致问题(pasteDAta改为pasteData)

内容的提问来源于stack exchange,提问作者Far

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 20:20:21