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

使用Google Apps Script将筛选后数组移至另一工作表

实现符合条件行的迁移与原表清空

以下是针对需求的完整实现方案,包含优化后的代码及关键逻辑说明:

function doPost(e) {
  var jsonString = e.postData.getDataAsString();
  var event = JSON.parse(jsonString);
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Import");
  var timeStamp = new Date();
  var time = Utilities.formatDate(timeStamp, "GMT+1", "dd/MM/yyyy, h:mm a");
  var nextRow = sheet.getLastRow() + 1;

  // 改用批量插入优化性能,替代单个setValue
  var newRow = [
    time,
    "", // 第2列留空,与原逻辑保持一致
    jsonString,
    event.data.amount,
    event.data.metadata.is_supplementary,
    event.data.reference
  ];
  sheet.getRange(nextRow, 1, 1, newRow.length).setValues([newRow]);

  // 可选:每次Webhook更新后自动执行迁移,注释该行则需手动运行migrateSupplementaryRows
  migrateSupplementaryRows();
}

function migrateSupplementaryRows() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sourceSheet = ss.getSheetByName("Import"); // 原数据工作表
  var targetSheet = ss.getSheetByName("Supplementary"); // 目标工作表,需提前创建或修改名称

  // 获取原表所有数据
  var allRows = sourceSheet.getDataRange().getValues();
  if (allRows.length <= 1) {
    Logger.log("原表仅含表头,无需迁移");
    return;
  }

  // 分离表头与数据行
  var dataRows = allRows.slice(1);

  // 筛选第5列(索引4)值为true的行
  var filteredRows = dataRows.filter(row => row[4] === true);

  if (filteredRows.length === 0) {
    Logger.log("无符合条件的行需要迁移");
    return;
  }

  // 将筛选行批量写入目标表
  var targetNextRow = targetSheet.getLastRow() + 1;
  targetSheet.getRange(targetNextRow, 1, filteredRows.length, filteredRows[0].length).setValues(filteredRows);

  // 清空原表数据行,仅保留表头
  var sourceDataRange = sourceSheet.getRange(2, 1, sourceSheet.getLastRow() - 1, sourceSheet.getLastColumn());
  sourceDataRange.clearContent();

  Logger.log(`成功迁移${filteredRows.length}行数据,原表已清空`);
}

// 保留原函数用于测试筛选结果
function getData() {
  var rows = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
  var filteredRows = rows.filter(function(row){
    var is_supplementary = row[4];
    if (is_supplementary == true){
      return row;
    }
  });
  Logger.log(filteredRows);
}

关键逻辑说明

  1. 性能优化:将doPost中的多个setValue改为批量setValues,减少Google Apps Script API调用次数,提升执行效率
  2. 迁移逻辑:
    • 分离原表的表头与数据行,避免表头被误迁移
    • 精准筛选第5列值为true的数据行
    • 批量将筛选结果写入目标工作表的末尾
  3. 原表清空:仅清空第2行及以后的数据区域,确保表头完整保留
  4. 容错处理:增加判断逻辑,避免原表无数据、无符合条件行时的无效操作与报错
  5. 触发方式:默认在Webhook更新后自动执行迁移,若需手动触发,注释doPost末尾的migrateSupplementaryRows()调用即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 18:05:34