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

如何用Apps Script实现Google Sheet多表按条件复制行并递增报价版本号

针对Google Sheets报价单版本迭代的Apps Script解决方案

原代码问题梳理

  • 读写逻辑不符合需求:你需要的是同工作表内复制符合条件的行到表尾,原代码是跨两个不同的Spreadsheet文件读写,完全不匹配使用场景
  • 条件判断存在语法错误:if (testvalue[i] /= 0)是赋值操作,不是相等判断,无法实现匹配指定报价编号的功能
  • 缺失核心逻辑:没有报价编号版本号自增的处理步骤
  • 运行效率低下:直接读取整列数据,会加载大量无效空行,拖慢脚本执行速度

可用实现代码

以下代码已适配你当前优先针对M-Items工作表实现功能的需求:

function upgradeQuoteRevision() {
  // 可修改配置项
  const OLD_QUOTE_ID = "GE-2108-0271-Rev.0"; // 替换为你需要迭代的旧报价编号
  const QUOTE_COLUMN = 2; // 报价编号存储在第2列(B列),无需改动
  const TARGET_SHEET = "M-Items"; // 目标工作表名,无需改动

  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName(TARGET_SHEET);
  const lastRow = sheet.getLastRow();
  const lastCol = sheet.getLastColumn();
  // 仅读取有效数据范围,优化运行效率
  const allRowData = sheet.getRange(1, 1, lastRow, lastCol).getValues();
  const newRowsToInsert = [];

  allRowData.forEach(row => {
    // 匹配旧报价编号
    if (row[QUOTE_COLUMN - 1] === OLD_QUOTE_ID) {
      const copyRow = [...row];
      // 版本号自动加1
      const oldRevNum = parseInt(OLD_QUOTE_ID.split("Rev.")[1]);
      const newQuoteId = OLD_QUOTE_ID.replace(`Rev.${oldRevNum}`, `Rev.${oldRevNum + 1}`);
      copyRow[QUOTE_COLUMN - 1] = newQuoteId;
      newRowsToInsert.push(copyRow);
    }
  });

  // 批量写入新行到表尾
  if (newRowsToInsert.length > 0) {
    sheet.getRange(lastRow + 1, 1, newRowsToInsert.length, newRowsToInsert[0].length).setValues(newRowsToInsert);
  }
}

扩展多工作表处理说明

如果需要同时处理多个工作表,只需要修改配置项,增加循环逻辑即可:

  • 将TARGET_SHEET替换为工作表名数组:const TARGET_SHEETS = ["工作表1", "工作表2", "工作表3"]
  • 在外层加一层循环遍历TARGET_SHEETS,对每个工作表执行上述处理逻辑即可

注意事项

  • 首次运行前请备份表格数据,避免误操作导致数据丢失
  • 如果报价编号的命名规则有调整,对应修改版本号拆分的逻辑即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:39:03