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

如何用Apps Script按Google Sheets M-Front表条件复制行到M-Items

function copyOldRevisionItems() {
  // 请替换为你的表格ID
  const SPREADSHEET_ID = '1Zgs1jzjIeaBpd5Ms7emQgxhVJBMtlEOlDNDfxlhSRiY';
  // 请根据你的实际列位置调整,以下默认报价编号在两张表的A列
  const FRONT_QUOTE_COL = 1;
  const ITEMS_QUOTE_COL = 1;

  const ss = SpreadsheetApp.openById(SPREADSHEET_ID);
  const frontSheet = ss.getSheetByName('M-Front');
  const itemsSheet = ss.getSheetByName('M-Items');

  // 1. 获取M-Front最新的报价编号
  const frontLastRow = frontSheet.getLastRow();
  const newQuoteNum = frontSheet.getRange(frontLastRow, FRONT_QUOTE_COL).getValue().toString();

  // 2. 拆分得到基础编号和上一版本编号
  const quoteParts = newQuoteNum.split('-Rev.');
  if (quoteParts.length < 2) return; // 不符合编号格式直接终止
  const baseQuote = quoteParts[0];
  const newRev = parseInt(quoteParts[1]);
  const oldRevNum = newRev - 1;
  if (oldRevNum < 0) return; // 初始版本Rev.0不需要复制旧数据
  const oldQuoteNum = `${baseQuote}-Rev.${oldRevNum}`;

  // 3. 从M-Items中筛选所有旧版本对应的行
  const itemsAllData = itemsSheet.getDataRange().getValues();
  const copyRows = [];
  itemsAllData.forEach(row => {
    if (row[ITEMS_QUOTE_COL - 1] === oldQuoteNum) { // 数组下标从0开始,所以列号减1
      const newRow = [...row]; // 复制整行数据
      newRow[ITEMS_QUOTE_COL - 1] = newQuoteNum; // 替换为新的报价编号
      copyRows.push(newRow);
    }
  });

  if (copyRows.length === 0) return; // 没有匹配到旧版本数据直接终止

  // 4. 批量写入新数据到M-Items末尾
  itemsSheet.getRange(
    itemsSheet.getLastRow() + 1,
    1,
    copyRows.length,
    copyRows[0].length
  ).setValues(copyRows);
}

使用说明

  • 列位置调整:如果你的报价编号不在A列,修改代码开头的FRONT_QUOTE_COL(M-Front表的报价编号所在列)、ITEMS_QUOTE_COL(M-Items表的报价编号所在列)为对应数字即可。
  • 触发器设置:打开脚本编辑器左侧的「触发器」面板,点击「添加触发器」,选择函数为copyOldRevisionItems,事件来源选择「电子表格」,事件类型选择「更改」,保存后即可实现新增修订号时自动复制商品项。

原脚本问题说明

  • getLastRow是方法需要加括号调用,原代码未加括号无法获取到正确的最后行行号
  • 缺少新旧修订号的匹配逻辑,也没有对复制后的行的报价编号进行替换
  • 重复调用getValues会拉低运行效率,本方案优化为一次性读取全表数据后在内存中处理,速度更快

内容的提问来源于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 01:15:02