范围高度不正确,为 1 但应为 344 - 当尝试使用 .setValues() 将范围设为另一个 sheet 时
Incorrect range height, was 1 but should be 344 - when trying to take range to another sheet using .setValues()
我正在尝试遍历一系列数据,在数据的第一列中查找某个值,然后将具有该值的所有行复制到另一个名为 "Closed Requests"[= 的 sheet 中12=]
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)
}
}
如您所见,我首先定义了数据范围并创建了一个数组 "x"。然后我遍历数据以在范围的第一列中找到文本 "CC"。然后我将这些行推入数组并使用 .setValues() 将它们复制到 sheet "Closed Requests"。我在 .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);
}
}
我正在尝试遍历一系列数据,在数据的第一列中查找某个值,然后将具有该值的所有行复制到另一个名为 "Closed Requests"[= 的 sheet 中12=]
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)
}
}
如您所见,我首先定义了数据范围并创建了一个数组 "x"。然后我遍历数据以在范围的第一列中找到文本 "CC"。然后我将这些行推入数组并使用 .setValues() 将它们复制到 sheet "Closed Requests"。我在 .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);
}
}