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

Google Apps Script优化:避免Google Sheets数据复制重复

优化后的Google Apps Script 实现

核心思路

  • 用目标表已同步最后一行的唯一标识(默认取第一列,可按需调整)定位数据源中的同步断点
  • 仅处理断点之后的新增数据源行,筛选Direct Sales类型数据
  • 批量写入目标表,避免重复数据并提升脚本运行效率

优化代码

function syncDirectSales() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sourceSheet = ss.getSheetByName("Data Source");
  const targetSheet = ss.getSheetByName("Direct Sales");
  
  // 一次性获取数据源和目标表的全部数据(共6列)
  const sourceData = sourceSheet.getRange(1, 1, sourceSheet.getLastRow(), 6).getValues();
  const targetData = targetSheet.getRange(1, 1, targetSheet.getLastRow(), 6).getValues();
  
  let startRowIndex = 0; // 默认从数据源第一行开始处理

  // 目标表有数据时,定位已同步的最后一行断点
  if (targetData.length > 0) {
    const lastSyncedKey = targetData[targetData.length - 1][0];
    for (let i = 0; i < sourceData.length; i++) {
      if (sourceData[i][0] === lastSyncedKey) {
        startRowIndex = i + 1; // 从断点的下一行开始处理新增数据
        break;
      }
    }
  }

  // 筛选新增的Direct Sales数据
  const newRows = [];
  for (let i = startRowIndex; i < sourceData.length; i++) {
    const row = sourceData[i];
    // 检查第6列(索引5)的操作类型
    if (row[5] === "Direct Sales") {
      newRows.push(row);
    }
  }

  // 批量写入目标表
  if (newRows.length > 0) {
    const targetNextRow = targetSheet.getLastRow() + 1;
    targetSheet.getRange(targetNextRow, 1, newRows.length, 6).setValues(newRows);
  }
}

关键说明

  1. 唯一标识调整:如果你的数据有更合适的唯一字段(比如操作ID、时间戳),可替换代码中row[0]对应的列索引
  2. 效率优化:一次性读写所有数据到数组,避免循环中反复调用getRange/setValues,减少服务调用次数
  3. 空表兼容:目标表为空时,自动从数据源第一行开始筛选所有符合条件的行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 20:10:26