如何解决Google表格onEdit在具有不同列的表格之间移动行 修改点:修改后的脚本:参考:
我正在尝试创建一个简单的发货处理流程,并希望使用onEdit复选框触发器在两张纸之间移动行。
基本概念是,将由多件组成的货件输入第一页,然后复制到WB_Log表。当计划将什么装载到卡车上时,将使用一个复选框将零件从WB_Log表移动到Load_Plan表,在此将在复选框右边的列中确定其装载位置。如果一件货物中的一件或几件不能放入特定的卡车中,我想取消选中Load_Plan上的复选框,并将该行移回到WB_Log Sheet。
这是我发现几乎可以正常工作的onEdit函数:
function onEdit(event) {
// assumes source data in sheet named WB_Log
// target sheet of move to named Load_Plan
// getColumn with check-boxes is currently set to column 14 or N
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if(s.getName() == "WB_Log" && r.getColumn() == 14 && r.getValue() == true) {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Load_Plan");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1,1);
s.getRange(row,1,numColumns).moveTo(target);
s.deleteRow(row);
} else if(s.getName() == "Load_Plan" && r.getColumn() == 14 && r.getValue() == false) {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("WB_Log");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1,numColumns).moveTo(target);
s.deleteRow(row);
}
}
我的问题是Load_Plan在复选框的右侧有列,我不想移回WB_Log。如何调整代码,以便在取消选中复选框(False)时,仅将A:N列中的信息从Load_Plan移回WB_Log?
任何人都可以借的任何建议或想法,将不胜感激。
解决方法
修改点:
- 当我看到共享的电子表格时,“ WB_Log”表在“ N”列中具有复选框。复选框被放置在工作表的底部。这样,
targetSheet.getLastRow() + 1
返回工作表底部的下一行。我认为这是您遇到问题的原因。- 我认为在您的情况下,当检索到“ B4”后一行的最后一行时,可以使用行号。
- 然后,在您的脚本中,
var numColumns = s.getLastColumn()
将检索“ Load_Plan”工作表中的“ A”至“ O”列。但是“ WB_Log”表具有“ A”至“ N”列。我认为检索到的列必须减少1列。
当以上几点反映到您的脚本时,它如下所示。
修改后的脚本:
请按如下所示修改脚本。
从:} else if(s.getName() == "Load_Plan" && r.getColumn() == 14 && r.getValue() == false) {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("WB_Log");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1,1);
s.getRange(row,1,numColumns).moveTo(target);
s.deleteRow(row);
}
至:
} else if(s.getName() == "Load_Plan" && r.getColumn() == 14 && r.getValue() == false) {
var row = r.getRow();
var numColumns = s.getLastColumn() - 1; // Modified
var targetSheet = ss.getSheetByName("WB_Log");
var lastRow = targetSheet.getRange("B4").getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow(); // Added
var target = targetSheet.getRange(lastRow + 1,1); // Modified
s.getRange(row,numColumns).moveTo(target);
s.deleteRow(row);
}
参考:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。