Я пытаюсь выполнить цикл данных, искать определенное значение в первом столбце данных, а затем скопировать все строки с этим значением в другой лист, называемый "Закрытые запросы",
function copyToClosed(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Open Requests");
var range = sheet.getActiveCell();
var lastrow = sheet.getLastRow();
var datarange = sheet.getRange(10,2,lastrow-1, 50).getValues();
var row = 10;
var x = [];
var sheetNameToMoveTheRowTo = "Closed Requests"
var targetSheet = ss.getSheetByName(sheetNameToMoveTheRowTo);
for (i=0;i<datarange.length;i++) {
if(i[0] == "CC") {
x.push([datarange[i]])
}
var targetRange =
targetSheet.getRange
(targetSheet.getLastRow()+1,2,datarange.length,datarange[0].length)
targetRange.setValues(x)
}
}
Как вы можете видеть, я сначала определяю datarange и создаю массив "x". Затем я просматриваю данные, чтобы найти текст "CC" в первом столбце диапазона. Затем я выталкиваю эти строки в массив и копирую их на лист "Закрытые запросы" с помощью.setValues(). Я получаю сообщение об ошибке в.setValues()
Просматривая другие случаи этой ошибки, я понял, что должна быть проблема с размером моего массива и что я неправильно определил либо массив, либо диапазон. Однако я не могу понять, в чем именно проблема.
Любая помощь будет оценена по достоинству.
Ошибки находятся в цикле for. Попробуй это:
function copyToClosed(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Open Requests");
var range = sheet.getActiveCell();
var lastrow = sheet.getLastRow();
var datarange = sheet.getRange(10,2,lastrow-1, 50).getValues();
var row = 10;
var x = [];
var sheetNameToMoveTheRowTo = "Closed Requests"
var targetSheet = ss.getSheetByName(sheetNameToMoveTheRowTo);
for (i=0;i<datarange.length;i++) {
if(datarange[i][0] == "CC") {
x.push(datarange[i])
}}
targetSheet.getRange(targetSheet.getLastRow()+1,2,x.length,x[0].length).setValues(x)
}
Другой вариант, который может работать, - это заставить его запускать onEdit, поэтому, когда значение будет изменено на CC, он автоматически переместит строку. вы можете сделать это, используя следующий код
function onEdit(event) {
// assumes source data in sheet named Active
// target sheet of move to named Found
// test column with yes/no is col 13 or M
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if(s.getName() == "Open Requests" && r.getColumn() == 1 && r.getValue() == 'CC') {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Closed Requests");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
}
}