如何在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); } }
关键修改说明
- 替换整行迁移逻辑:不再使用
moveTo迁移整行,而是单独提取A-E列和J列的数值,合并成数组后写入目标表 - 日期写入位置调整:因为迁移的是6列数据,所以日期写入到目标行的第7列(
dataToMove.length + 1) - 回退逻辑适配:从
LIBERADOS回退到DEMANDAS时,提取存储的前6列数据(对应原A-E和J列),分别写入DEMANDAS的A-E列和J列位置 - 条件判断优化:拆分了CORRETIVA和非CORRETIVA的迁移条件,避免逻辑冲突
内容的提问来源于stack exchange,提问作者DimitryART
相关产品推荐
相关产品推荐

