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

如何在Apps Script中筛选日期不在指定周的行并迁移至历史表?

优化Google Apps Script实现按日期筛选迁移数据

原脚本会将「Schedule Setup」工作表的所有数据复制到「Schedule History」后清空原表,现需优化为:仅迁移C列和D列日期均不在A1(周起始日)、B1(周结束日)指定范围内的行,保留至少一列日期处于该周范围的行,同时保留按钮触发和每周六自动触发的功能。


修改后的完整脚本

function clearschedule() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const schedSheet = ss.getSheetByName("Schedule Setup");
  const histSheet = ss.getSheetByName("Schedule History");
  
  // 获取A1、B1指定的周范围日期
  const weekStart = schedSheet.getRange("A1").getValue();
  const weekEnd = schedSheet.getRange("B1").getValue();
  
  // 读取原表有效数据(从第3行开始,共8列)
  const totalRows = schedSheet.getLastRow() - 2;
  if (totalRows <= 0) return; // 无数据时直接退出
  const dataRange = schedSheet.getRange(3, 1, totalRows, 8);
  const allRows = dataRange.getValues();
  
  const rowsToMove = [];
  const rowIndexesToDelete = [];

  // 遍历每行筛选符合迁移条件的行
  allRows.forEach((row, index) => {
    const dateC = row[2]; // C列对应数组索引2
    const dateD = row[3]; // D列对应数组索引3
    
    // 判断单列日期是否超出周范围
    const isCOutOfRange = dateC < weekStart || dateC > weekEnd;
    const isDOutOfRange = dateD < weekStart || dateD > weekEnd;
    
    // 仅当两列日期均超出范围时,标记为迁移/删除目标
    if (isCOutOfRange && isDOutOfRange) {
      rowsToMove.push(row);
      rowIndexesToDelete.push(3 + index); // 转换为原表实际行号
    }
  });

  // 执行迁移和删除操作
  if (rowsToMove.length > 0) {
    // 将数据写入历史表
    const histLastRow = histSheet.getLastRow();
    histSheet.getRange(histLastRow + 1, 1, rowsToMove.length, 8).setValues(rowsToMove);
    
    // 倒序删除原表行(避免删除行导致后续索引偏移)
    rowIndexesToDelete.reverse().forEach(rowNum => {
      schedSheet.deleteRow(rowNum);
    });
  }
}

关键逻辑说明

  • 日期筛选规则:通过数组索引定位C、D列日期,分别判断是否超出A1-B1的周范围,仅当两列日期都不在范围内时才执行迁移
  • 行删除优化:采用倒序删除(从大到小删除行号),避免删除前面的行导致后续行的索引错乱
  • 空数据处理:先判断原表是否有有效数据,无数据时直接退出,避免无效操作
  • 动态行计数:根据原表实际行数计算数据范围,替代原脚本中固定依赖I1值的逻辑,提升准确性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 18:22:43