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

如何自动合并3个工作表订单数据至Google Sheets主表并同步新记录

解决方案:Google Sheets多平台订单自动增量同步到主表

核心思路

要实现增量同步,关键是通过唯一订单ID区分已同步和新增订单。假设所有平台工作表(ebay/etsy/amazon)和主表"GI Orders"都包含唯一标识订单的列(比如订单号列),我们用这个列来判断订单是否已存在于主表,避免重复插入。

实现脚本(Google Apps Script)

打开你的Google Sheet,点击「扩展程序」→「Apps Script」,粘贴以下代码:

// 配置常量,根据实际列结构调整
const MAIN_SHEET_NAME = "GI Orders";
const SOURCE_SHEET_NAMES = ["ebay", "etsy", "amazon"];
// 唯一订单ID所在的列索引(从0开始,比如B列填1,C列填2)
const ORDER_ID_COLUMN_INDEX = 1;
// 主表中订单数据开始的列(D列对应索引3)
const MAIN_DATA_START_COLUMN = 3;

function syncOrders() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const mainSheet = ss.getSheetByName(MAIN_SHEET_NAME);
  
  // 获取主表中已存在的所有订单ID,存入Set用于快速查重
  const mainOrderIds = new Set();
  const mainDataRange = mainSheet.getRange(2, MAIN_DATA_START_COLUMN + ORDER_ID_COLUMN_INDEX, mainSheet.getLastRow() - 1, 1);
  const mainOrderIdValues = mainDataRange.getValues();
  mainOrderIdValues.forEach(row => {
    if (row[0]) mainOrderIds.add(row[0].toString());
  });

  // 遍历所有数据源表,同步增量订单
  SOURCE_SHEET_NAMES.forEach(sheetName => {
    const sourceSheet = ss.getSheetByName(sheetName);
    if (!sourceSheet) return;
    
    // 获取数据源表的所有订单数据(跳过表头)
    const sourceLastRow = sourceSheet.getLastRow();
    if (sourceLastRow <= 1) return; // 无数据行
    const sourceDataRange = sourceSheet.getRange(2, 1, sourceLastRow - 1, sourceSheet.getLastColumn());
    const sourceData = sourceDataRange.getValues();
    
    // 筛选出未同步的订单行
    const newOrders = sourceData.filter(row => {
      const orderId = row[ORDER_ID_COLUMN_INDEX]?.toString();
      return orderId && !mainOrderIds.has(orderId);
    });

    // 将新增订单插入主表底部(D列及以后)
    if (newOrders.length > 0) {
      const insertRow = mainSheet.getLastRow() + 1;
      mainSheet.getRange(insertRow, MAIN_DATA_START_COLUMN + 1, newOrders.length, newOrders[0].length).setValues(newOrders);
      
      // 可选:在数据源表标记已同步(比如新增"同步状态"列,这里假设是最后一列)
      // const statusColumn = sourceSheet.getLastColumn() + 1;
      // sourceSheet.getRange(2, statusColumn, sourceLastRow - 1, 1).setValue("已同步");
    }
  });
}

脚本配置说明

  1. ORDER_ID_COLUMN_INDEX:修改为你实际的唯一订单ID列索引(比如订单ID在B列,填1,因为JavaScript数组从0开始计数)。
  2. MAIN_DATA_START_COLUMN:主表中订单数据开始的列,D列对应3,无需修改,除非你的主表结构变更。

自动同步设置

方式1:固定间隔同步(推荐)

设置每小时自动执行脚本:

  1. 在Apps Script编辑器中,点击左侧「触发器」图标(时钟形状)。
  2. 点击「添加触发器」:
    • 选择函数:syncOrders
    • 选择事件源:「时间驱动」
    • 选择类型:「小时计时器」,间隔选「每小时」
  3. 保存并授权脚本权限。

方式2:新增行时自动触发

如果需要实时同步,可设置onChange触发器(需额外判断插入行操作),但稳定性略低于时间驱动:
在脚本中添加以下函数,再按上述步骤添加触发器(事件源选「从电子表格」,事件类型选「更改」):

function onSheetChange(e) {
  if (e.changeType === "INSERT_ROW" && SOURCE_SHEET_NAMES.includes(e.source.getActiveSheet().getName())) {
    syncOrders();
  }
}

注意事项

  • 确保所有平台工作表和主表的列结构完全一致,否则同步的数据会错位。
  • 唯一订单ID必须全局唯一(不同平台的订单ID不能重复),如果存在重复风险,可在ID前拼接平台标识(比如ebay-12345)。
  • 主表A-C列的人工维护数据不会被脚本修改,脚本仅在D列及以后插入新增订单数据。
  • 首次运行脚本时,会同步所有未在主表中的历史订单,之后仅同步增量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 05:07:15