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

Google Sheets Apps Script 按A列ID去重复制源表数据到目标表并定时运行

Google Sheets 跨表唯一数据自动追加实现方案

一、修正后完整代码

针对你的需求优化了逻辑,解决了原代码未对比目标表已有ID、覆盖原有数据、查询效率低的问题:

function keepUnique(){
  // 可根据实际业务调整配置项
  const UNIQUE_COL_INDEX = 0; // 唯一ID对应的列索引,A列对应0
  const SOURCE_SHEET_NAME = "source";
  const TARGET_SHEET_NAME = "target";
  const SOURCE_HAS_HEADER = true; // source表是否有表头,是则跳过第一行
  const TARGET_HEADER_ROWS = 2; // target表表头占用行数,数据从N+1行开始写入

  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sourceSheet = ss.getSheetByName(SOURCE_SHEET_NAME);
  const targetSheet = ss.getSheetByName(TARGET_SHEET_NAME);

  // 提前拉取target表所有已有ID存入Set,重复判断效率远高于双层循环
  const existIds = new Set();
  const targetLastRow = targetSheet.getLastRow();
  if (targetLastRow > TARGET_HEADER_ROWS) {
    const targetIdRange = targetSheet.getRange(TARGET_HEADER_ROWS + 1, UNIQUE_COL_INDEX + 1, targetLastRow - TARGET_HEADER_ROWS, 1);
    targetIdRange.getValues().flat().forEach(id => existIds.add(id));
  }

  // 拉取source表全量数据
  const sourceAllData = sourceSheet.getDataRange().getValues();
  const startRow = SOURCE_HAS_HEADER ? 1 : 0;
  const newRows = [];

  // 筛选ID未在target出现的新增行
  for (let i = startRow; i < sourceAllData.length; i++) {
    const row = sourceAllData[i];
    const currentId = row[UNIQUE_COL_INDEX];
    if (currentId && !existIds.has(currentId)) {
      newRows.push(row); // 若仅需保留A列ID,修改为 newRows.push([currentId])
      existIds.add(currentId); // 同时跳过source表内部的重复ID行
    }
  }

  // 无新增数据直接结束运行
  if (newRows.length === 0) return;

  // 新增数据追加到target表底部,不覆盖原有内容
  const targetInsertRow = targetLastRow > 0 ? targetLastRow + 1 : TARGET_HEADER_ROWS + 1;
  targetSheet.getRange(targetInsertRow, 1, newRows.length, newRows[0].length).setValues(newRows);
}

二、凌晨定时运行设置步骤

  • 打开对应Google Sheets,点击顶部菜单栏「扩展程序」->「Apps 脚本」进入脚本编辑器
  • 保存上述代码后,点击编辑器左侧侧边栏的「触发」(时钟样式图标)
  • 点击右下角「添加触发」按钮,按以下参数配置:
    • 选择要运行的功能:keepUnique
    • 选择要运行的部署:Head(默认值即可)
    • 选择事件源:时间驱动
    • 选择类型:日计时器
    • 选择时间范围:选择你需要的凌晨时段,例如「凌晨1点到2点」
  • 点击保存,按提示完成谷歌账号权限授权即可生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:57:02