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

如何在onEdit函数中迁移行内指定列的数据?

修改Google Apps Script实现指定列数据迁移

原代码通过复选框触发整行迁移,现在调整为只迁移**A-E列(第1-5列)和J列(第10列)**的数据,同时保留原逻辑的复选框判断、行删除和日期记录功能,修改后的代码如下:

function onEdit(event) { // COD ATUALIZADO 22/11/22
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();
  var row = r.getRow();

  // 从DEMANDAS迁移到EQUIPAMENTOS PARA CORRETIVA(CORRETIVA类型)
  if(s.getName() == "DEMANDAS" && r.getColumn() == 1 && r.getValue() == true && s.getRange(row,5).getValue() == "CORRETIVA") {
    var targetSheet = ss.getSheetByName("EQUIPAMENTOS PARA CORRETIVA");
    var targetRow = targetSheet.getLastRow() + 1;
    
    // 提取A-E列和J列的数据
    var rangeAE = s.getRange(row, 1, 1, 5).getValues()[0];
    var rangeJ = s.getRange(row, 10, 1, 1).getValues()[0];
    var dataToMove = rangeAE.concat(rangeJ);
    
    // 写入目标表
    targetSheet.getRange(targetRow, 1, 1, dataToMove.length).setValues([dataToMove]);
    // 添加迁移日期
    targetSheet.getRange(targetRow, dataToMove.length + 1).setValue(new Date());
    
    s.deleteRow(row);
  }

  // 从DEMANDAS迁移到LIBERADOS(非CORRETIVA类型)
  if(s.getName() == "DEMANDAS" && r.getColumn() == 1 && r.getValue() == true && s.getRange(row,5).getValue() != "CORRETIVA") {
    var targetSheet = ss.getSheetByName("LIBERADOS");
    var targetRow = targetSheet.getLastRow() + 1;
    
    // 提取A-E列和J列的数据
    var rangeAE = s.getRange(row, 1, 1, 5).getValues()[0];
    var rangeJ = s.getRange(row, 10, 1, 1).getValues()[0];
    var dataToMove = rangeAE.concat(rangeJ);
    
    // 写入目标表
    targetSheet.getRange(targetRow, 1, 1, dataToMove.length).setValues([dataToMove]);
    // 添加迁移日期
    targetSheet.getRange(targetRow, dataToMove.length + 1).setValue(new Date());
    
    s.deleteRow(row);
  }

  // 从LIBERADOS回退到DEMANDAS
  else if(s.getName() == "LIBERADOS" && r.getColumn() == 1 && r.getValue() == false) {
    var targetSheet = ss.getSheetByName("DEMANDAS");
    var targetRow = targetSheet.getLastRow() + 1;
    
    // LIBERADOS中存储的是A-E(1-5列)、J(6列)、日期(7列),提取前6列对应原数据
    var dataToMove = s.getRange(row, 1, 1, 6).getValues()[0];
    
    // 写入DEMANDAS的A-E列和J列(前5列写A-E,第6列写J列)
    targetSheet.getRange(targetRow, 1, 1, 5).setValues([dataToMove.slice(0,5)]);
    targetSheet.getRange(targetRow, 10, 1, 1).setValues([[dataToMove[5]]]);
    
    s.deleteRow(row);
  }
}

关键修改说明

  1. 替换整行迁移逻辑:不再使用moveTo迁移整行,而是单独提取A-E列和J列的数值,合并成数组后写入目标表
  2. 日期写入位置调整:因为迁移的是6列数据,所以日期写入到目标行的第7列(dataToMove.length + 1)
  3. 回退逻辑适配:从LIBERADOS回退到DEMANDAS时,提取存储的前6列数据(对应原A-E和J列),分别写入DEMANDAS的A-E列和J列位置
  4. 条件判断优化:拆分了CORRETIVA和非CORRETIVA的迁移条件,避免逻辑冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 13:35:15