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

Google Sheets脚本修改:状态变更时仅移动指定列至另一工作表

解决方案

你需要先把要提取的列转换成对应的数字索引(A=1,B=2,D=4,F=6,G=7,H=8,M=13),然后从源行中筛选这些列的数据,再写入目标工作表。以下是修改后的完整代码:

// 请根据你的实际表格配置修改这些变量
const statusColumn = 3; // 示例:如果状态列是C列就填3
const sourceSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("源表名称");
const destinationSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("目标表名称");

function onEdit(e) {
  var editedRange = e.range;
  var editedRow = editedRange.getRow();
  
  // 跳过表头行(如果你的表头在第1行)
  if (editedRow === 1) return;

  if (editedRange.getColumn() === statusColumn) {
    var status = editedRange.getValue();
    if (status === "Closed/Won") {
      // 定义需要提取的列索引(对应A、B、D、F、G、H、M)
      const targetColumns = [1, 2, 4, 6, 7, 8, 13];
      // 获取源行的所有数据(转成一维数组)
      const rowData = sourceSheet.getRange(editedRow, 1, 1, sourceSheet.getLastColumn()).getValues()[0];
      // 筛选出需要的列数据(数组是0索引,所以列索引要减1)
      const filteredData = targetColumns.map(colIndex => rowData[colIndex - 1]);
      
      // 避免写入完全空的行
      if (filteredData.some(cell => cell !== "")) {
        // 把筛选后的数据追加到目标表最后一行
        destinationSheet.appendRow(filteredData);
        // 如果需要移动后删除源行,取消下面这行注释
        // sourceSheet.deleteRow(editedRow);
      }
    }
  }
}

关键修改说明:

  • 指定目标列:用targetColumns数组存储你需要的列对应的数字索引,表格列从1开始计数。
  • 筛选数据:先获取整行的所有数据(转成一维数组),再通过map方法筛选出需要的列,这里要注意数组是0索引,所以列索引要减1才能对应上。
  • 写入目标表:用appendRow方法直接把筛选后的数组写入目标表的最后一行,比原来的copyTo更灵活,适合只写部分列的场景。
  • 空行判断:用some方法检查筛选后的数据是否有非空内容,避免写入完全空的行。

注意:请根据你的实际表格,修改statusColumn、源表和目标表的名称。如果需要移动后删除源行,取消sourceSheet.deleteRow(editedRow)的注释即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 04:35:08