我希望此脚本将row
移至命名范围(“ APPROVED”)的底部
function onEdit(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = e.source.getActiveSheet();
var r = e.source.getActiveRange();
if (s.getName() == "Sheet1" && r.getColumn() == 6 && r.getValue() == "APPROVED") {
var row = r.getRow();
var numColumns = s.getLastColumn();
var namedRange = ss.getRangeByName('APPROVED');
s.getRange(row, 1, 1,numColumns).moveTo(namedRange);
s.deleteRow(row)
}
}
该脚本当前覆盖指定范围内的第一行。我尝试了以下
var row = r.getRow();
var numColumns = s.getLastColumn();
var namedRange = ss.getRangeByName('APPROVED');
var target = (namedRange.getLastRow() +1, 1));
s.getRange(row, 1, 1,numColumns).moveTo(target);
s.deleteRow(row)
我当然是GAS的新手,所以对修复的任何详细说明将不胜感激。
答案 0 :(得分:0)
尝试一下:
function setLastRowOfANamedRange(row,s,nr) {
var nr=nr || SpreadsheetApp.getActive().getRangeByName('APPROVED');//debug
var s=s || SpreadsheetApp.getActive().getActiveSheet();//debug
var row=row || 5;//debug
var vA=nr.getValues();
vA[vA.length-1]=s.getRange(row,1,1,vA[0].length).getValues();
nr.setValues(vA);
}
答案 1 :(得分:0)
namedRange
的最后一行。如果我的理解是正确的,作为另一种解决方案,该修改如何?我认为您的第二个脚本的方法接近目标。因此,在此答案中,我使用了moveTo()
。因为我认为此方法可能对其他用户也有用,所以我发布了此信息。我认为您的情况有几个答案。因此,请仅考虑其中之一。
s.getRange(row, 1, 1,numColumns).moveTo(namedRange);
s.getRange(row, 1, 1,numColumns).moveTo(namedRange.offset(namedRange.getLastRow() - namedRange.getRow(), 0));
namedRange
在offset()
的最后一行添加一行。namedRange
的最后一行的下一行,请进行以下修改。
s.getRange(row, 1, 1,numColumns).moveTo(namedRange.offset(namedRange.getLastRow() - namedRange.getRow() + 1, 0))
moveTo()
。因此,s.deleteRow(row)
的这一行可能会被删除。为此,请根据您的情况进行操作。如果这不是您想要的结果,我表示歉意。
如果我的理解是正确的,那么该修改如何?
s.getRange(row, 1, 1,numColumns).moveTo(namedRange);
var values = namedRange.getValues();
for (var i = values.length - 1; i >= 0; i--) {
var r = values[i].some(function(e) {return e});
if (r) {
s.getRange(row, 1, 1,numColumns).moveTo(namedRange.offset(i + 1, 0));
break;
}
}
namedRange.getLastRow()
检索指定范围的最大行号。因此,我准备了用于检索命名范围中最后一行的脚本。