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

谷歌表格脚本修改需求:覆盖重复周数据并保留最近14周数据

修改Google Apps Script实现周数据同步与清理

需求说明

需要将Source表的最新数据同步到Destination表,规则如下:

  • 每周Source表会上传最近两周的数据,同步时覆盖Destination表中同周的旧数据
  • Destination表仅保留最近14周的数据,自动删除更早的记录

修改后的脚本

function SyncWeeklyData() {
  // 定义表格ID和表名
  const SPREADSHEET_ID = '1BQb-_572SbReJWcD8nhfWFj8u4D15jhg7NtrsBT2vz4';
  const SOURCE_SHEET_NAME = 'Source';
  const DESTINATION_SHEET_NAME = 'Destination';
  
  // 获取源表和目标表
  const spreadsheet = SpreadsheetApp.openById(SPREADSHEET_ID);
  const sourceSheet = spreadsheet.getSheetByName(SOURCE_SHEET_NAME);
  const destinationSheet = spreadsheet.getSheetByName(DESTINATION_SHEET_NAME);
  
  // 读取源表数据(包含表头)
  const sourceData = sourceSheet.getDataRange().getValues();
  const [sourceHeader, ...sourceRows] = sourceData;
  
  // 读取目标表现有数据(包含表头)
  const destinationData = destinationSheet.getDataRange().getValues();
  const [destinationHeader, ...destinationRows] = destinationData;
  
  // 用Map存储周数对应的完整数据,源表数据自动覆盖同周旧数据
  // 假设周数在第1列(索引0),若实际位置不同,修改此处索引
  const weekDataMap = new Map();
  
  // 先导入目标表现有数据
  destinationRows.forEach(row => {
    const weekNumber = row[0];
    weekDataMap.set(weekNumber, row);
  });
  
  // 导入源表数据,覆盖同周旧数据
  sourceRows.forEach(row => {
    const weekNumber = row[0];
    weekDataMap.set(weekNumber, row);
  });
  
  // 提取所有周数,转数字后降序排序
  const sortedWeeks = Array.from(weekDataMap.keys())
    .map(week => Number(week))
    .sort((a, b) => b - a);
  
  // 保留最近14周的数据
  const keepWeeks = sortedWeeks.slice(0, 14);
  
  // 筛选出需要保留的行数据,按周数降序排列
  const finalRows = keepWeeks.map(week => weekDataMap.get(week.toString()));
  
  // 清空目标表内容(保留表头)
  destinationSheet.clearContents();
  destinationSheet.getRange(1, 1, 1, destinationHeader.length).setValues([destinationHeader]);
  
  // 将筛选后的数据写入目标表
  if (finalRows.length > 0) {
    destinationSheet.getRange(2, 1, finalRows.length, finalRows[0].length).setValues(finalRows);
  }
}

关键逻辑说明

  1. 数据覆盖机制:通过Map结构存储周数与行数据的映射,先导入目标表旧数据,再导入源表数据,自动完成同周数据的覆盖
  2. 周数筛选:提取所有周数并降序排序,截取前14条即为最近14周的有效数据
  3. 目标表更新:清空目标表原有内容(保留表头)后写入筛选后的最新数据,避免重复数据堆积

注意事项

  • 确保周数列格式统一(如均为数字格式的"45""46"),否则会导致匹配失败
  • 若周数不在第1列,修改脚本中row[0]的索引值(比如周数在第3列则改为row[2])
  • 首次运行前建议备份Destination表数据,避免意外丢失

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:50:22