如何解决根据特定条件将行移至不同的选项卡
我有一个代码,当第 22 列的工作完成时,我用它来移动行我希望起始行为 4,目标工作表也将从第 4 行开始,但无法实现
function onEdit(e) {
var excl=['WMS WIP','WORK DONE','Dashboard','INBOUND ETA','SHIPMENT PRIORITY'];
var sh=e.range.getSheet();
if(excl.indexOf(sh.getName())==-1 && e.range.rowStart>3) {
var dt=new Date();
if(e.range.columnStart==2)sh.getRange(e.range.rowStart,1).setValue(dt);
}
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = e.source.getActiveSheet();
var r = e.source.getActiveRange();
if(s.getName() == "WMS WIP" && r.getColumn() == 22 && r.getValue() == "DONE") {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("WORK DONE");
var target = targetSheet.getRange(targetSheet.getLastRow() + 4,1);
s.getRange(row,1,numColumns).moveTo(target);
s.deleteRow(row);
}
}
解决方法
说明:
逻辑很简单:
if
目标工作表的当前最后一行小于 4
,然后将数据粘贴到行 4
。否则,将数据粘贴在包含内容的最后一行之后的一行。我使用了 ternary operator 来实现这种比较。
- 我还清除了您的代码,以避免您多次重复进行不必要的调用。例如,
e.range
出现了4
次,而且var r = e.source.getActiveRange()
是不必要的,因为该信息再次从e.range
获取。
解决方案:
这将确保数据将从目标工作表的 4th
行开始粘贴:
function onEdit(e) {
const excl=['WMS WIP','WORK DONE','Dashboard','INBOUND ETA','SHIPMENT PRIORITY'];
const ss = e.source;
const ar = e.range;
const row = ar.getRow();
const col = ar.getColumn();
const sh=ar.getSheet();
const shName = sh.getName();
if(!excl.includes(shName) && row>3) {
const dt=new Date();
if(col==2)sh.getRange(row,1).setValue(dt);
}
if(shName == "WMS WIP" && col == 22 && ar.getValue() == "DONE") {
const numColumns = sh.getLastColumn();
const targetSheet = ss.getSheetByName("WORK DONE");
const target = targetSheet.getLastRow()>3 ?
targetSheet.getRange(targetSheet.getLastRow() + 1,1):
targetSheet.getRange(4,1);
sh.getRange(row,1,numColumns).moveTo(target);
sh.deleteRow(row);
}
}
,
试试这个:
function onEdit(e) {
var sh=e.range.getSheet();
var excl=['WMS WIP','SHIPMENT PRIORITY'];
if(excl.indexOf(sh.getName())==-1 && e.range.rowStart>3) {
var dt=new Date();
if(e.range.columnStart==2)sh.getRange(e.range.rowStart,1).setValue(dt);
}
if(sh.getName() == "WMS WIP" && e.range.columnStart == 22 && e.value == "DONE" && e.range.rowStart>3) {
var targetSheet = e.source.getSheetByName("WORK DONE");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1,1);
sh.getRange(e.range.rowStart,sh.getLastColumn()).moveTo(target);
sh.deleteRow(e.range.rowStart);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。