我有一个谷歌应用程序令我感到沮丧。它基本上是对副本行脚本的修改,现在可以循环遍历该值的特定列。如果该列中的值大于要监视的值,我希望该行移动到下一个工作表。在这种情况下为3。
我已经最好地修改了它但却不明白为什么它没有执行。任何人都可以帮助我筛选代码并找出我错过的内容吗?
function moveAllRightRows(){
//this script is supposed to move every row in Sheet1 to Sheet2
//if the value in a cell is greater than 3
var columnNumberToWatch = 9; //column where value will be filled
var valueToWatch = 3; //integer that determines trigger value
var sheetNameToMoveTheRowTo = "Sheet2";
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Sheet1");
var row = 1;
var len = sheet.getRange(1 , columnNumberToWatch, sheet.getLastRow() - 1).length;
var range = sheet.getRange(row,9,sheet.getLastRow()-1,1); //get column 9 from row 1 to the end
for (row ; row <len ; row++){
if (range.getValue() > valueToWatch) { //if the value in the column is greater than 3
var targetSheet = ss.getSheetByName(sheetNameToMoveTheRowTo);
var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
sheet.getRange(row, 1, 1, sheet.getLastColumn()).moveTo(targetRange);
sheet.deleteRow(row);
}
}
}
答案 0 :(得分:0)
range.getValue()
仅返回给定范围内的左上角单元格。因此,您不是循环遍历列中的所有单元格,而只是遍历给定列中的第一个单元格。因此,通过循环的每次迭代(行++),只检查第一个单元格(单元格I1),是否大于3.使用getValues()
代替。尝试修改
这
var len = sheet.getRange(1 , columnNumberToWatch, sheet.getLastRow() - 1).length;
var range = sheet.getRange(row,9,sheet.getLastRow()-1,1); //get column 9 from row 1 to the end
for (row ; row <len ; row++){
if (range.getValue() > valueToWatch) { //if the value in the column is greater than 3
var targetSheet = ss.getSheetByName(sheetNameToMoveTheRowTo);
var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
sheet.getRange(row, 1, 1, sheet.getLastColumn()).moveTo(targetRange);
sheet.deleteRow(row);
要
var range = sheet.getRange(row,9,sheet.getLastRow(),1).getValues(); //get Values of column 9 from row 1 to the end
var len = range.length;
var targetSheet = ss.getSheetByName(sheetNameToMoveTheRowTo);
for (row=len; row> 0 ; row--){
if (range[row-1][0]> valueToWatch) { //if the value in the column is greater than 3
var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
sheet.getRange(row, 1, 1,sheet.getLastColumn()).moveTo(targetRange);
sheet.deleteRow(row);
}}