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

Google Apps Script需求:按列11值复制行至Sheet2并删除原行

Google Apps Script:按列值筛选行、复制日志并删除原行
function processRows() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sourceSheet = ss.getSheetByName("原工作表"); // 替换成你的原工作表名称
  const logSheet = ss.getSheetByName("Sheet2");
  
  // 获取原工作表所有数据(第1行视为表头,从第2行开始处理)
  const data = sourceSheet.getDataRange().getValues();
  const header = data[0];
  const rowsToProcess = [];
  
  // 遍历数据,筛选第11列(数组索引为10,因JS数组从0开始)符合条件的行
  for (let i = 1; i < data.length; i++) {
    const col11Value = data[i][10];
    // 替换为你的实际筛选条件,比如 col11Value > 50 或 col11Value === "已归档"
    if (col11Value) { // 示例:列11不为空时处理
      rowsToProcess.push({
        rowData: data[i].slice(0,15), // 提取第1-15列数据
        rowIndex: i + 1 // 对应表格的实际行号(从1开始)
      });
    }
  }
  
  if (rowsToProcess.length === 0) return; // 无符合条件的行直接退出
  
  // 追加数据到日志表,空表先写入表头
  if (logSheet.getLastRow() === 0) {
    logSheet.appendRow(header.slice(0,15));
  }
  const logData = rowsToProcess.map(item => item.rowData);
  logSheet.getRange(logSheet.getLastRow() + 1, 1, logData.length, 15).setValues(logData);
  
  // 倒序删除原表行,避免索引错乱
  rowsToProcess.sort((a,b) => b.rowIndex - a.rowIndex).forEach(item => {
    sourceSheet.deleteRow(item.rowIndex);
  });
}

核心逻辑说明

  • 定位目标行:通过遍历原表所有数据,检查第11列的数值是否符合筛选条件,将需要处理的行数据和对应行号存入数组,解决你不知道如何按列值定位行的问题。
  • 批量复制日志:先判断日志表是否为空,为空则写入表头;再批量追加筛选出的行数据,比逐行appendRow效率更高。
  • 安全删行:必须倒序删除行——如果从前往后删,删除一行后后续行的行号会前移,导致漏删或误删。

自定义修改点

  1. 替换sourceSheet的工作表名称为你实际的原表名称。
  2. 修改筛选条件:把if (col11Value)替换为你的需求,比如:
    • 数值大于指定值:if (col11Value > 100)
    • 等于特定文本:if (col11Value === "已完成")
    • 非空且小于阈值:if (col11Value && col11Value < 50)

为什么公式无法实现?

QUERY()或FILTER()函数仅能提取数据,无法直接修改原工作表(删除行),而Google Apps Script可以直接操作表格的行数据,完全匹配你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 14:22:15