我已经创建了一个onEdit()函数,该函数将根据“状态”列的值将目标行移动到另一张工作表。它似乎工作正常……但有时在随机时刻,当状态列更改且目标行下方的行随之移动到另一张工作表时,该函数运行。无法找到问题的根源。
我似乎找不到代码中的缺陷,所以我想知道这是否与以下事实有关:该工作表中有多个人在工作,以及getRowIndex()如何弄乱。
function onEdit(e) {
var ss = e.source;
var s = ss.getActiveSheet();
var r = e.range;
// where the action and move columns are in the form responses sheet
var actionCol = 1;
var nameCol = 1;
// Get the row and column of the active cell.
var rowIndex = r.getRowIndex();
var colIndex = r.getColumnIndex();
// Get the number of columns in the active sheet.
var colNumber = s.getLastColumn();
// if our action/status col is changed to Nieuw do stuff
if (e.value == "Nieuw" && colIndex == actionCol) {
// get our target sheet name - in this example we are using the priority column
var targetSheet = s.getRange(rowIndex, nameCol).getValue();
// if the sheet exists do more stuff
if (ss.getSheetByName(targetSheet)) {
// set our target sheet and target range
var targetSheet = ss.getSheetByName(targetSheet);
var targetRange = targetSheet.getRange(targetSheet.getLastRow()+1, 1, 1, colNumber);
// get our source range/row
var sourceRange = s.getRange(rowIndex, 1, 1, colNumber);
sourceRange.copyTo(targetRange);
s.deleteRow(rowIndex);
}
}
}
答案 0 :(得分:0)
代替获取目标工作表的范围,而是使用copyTo()
https://developers.google.com/apps-script/reference/spreadsheet/
此外,由于多个人正在使用电子表格,因此您应该实施锁定服务。 sheet.appendRow(1D Array);
是原子的,因此不需要锁定服务,但是对于多个用户而言,获取源范围可能是一个问题。
参见How do I use LockService properly every time in Google Apps Script?