应用脚本函数导致错误"the coordinates of the range are outside the dimensions of the sheet"



我必须垂直和水平地循环一张纸,并将某些值复制到另一张纸上。问题是由于错误"范围的坐标超出工作表的尺寸",它将无法工作。它将出现在带有getLastRow((或getLastColumn((方法的行上。尝试使用 getLastRow(( - 1(其他帖子中的响应(修复,但不起作用。

此外,没有用"或类似的公式填充单元格,只有简单的文本。

代码:

function Ordenar_XT() {
var leidas = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Base de datos REPXT");
var relevado= SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Base de datos REPXT").getRange("A:A").getValues();
var idTurma= SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Base de datos REPXT").getRange("B:B").getValues();
var baseTrainers= SpreadsheetApp.getActiveSpreadsheet().getSheetByName("BASEXT");
var baseContenido = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("BASECONTENIDO");

var XT = leidas.getRange(1, 1, leidas.getLastRow() - 1, leidas.getLastColumn()).getValues();
for(var i=1;i<leidas.getLastRow()+1;i++){
if(relevado[i]!="Relevado"){
for(var j=0;j < leidas.getLastColumn()-1;j++){
if(XT[i][j]=="Estou deixando feedback sobre:" || XT[i][j]=="Estoy dejando feedback sobre:"){
var last= baseTrainers.getLastRow()+1; 
baseTrainers.getRange(last, 2).setValue(XT[i][j+1]);
baseTrainers.getRange(last, 1).setValue(idTurma[i]);
var formula = baseTrainers.getRange(1,8);
formula.copyTo(baseTrainers.getRange(last, 8));

var ok=true;
var l = 2;
while(ok && l <=10){
switch(XT[i][j+l]){
case "¿Qué tan satisfecho estás con tu XT?": 
case "Quão satisfeito você ficou com seu XT?": baseTrainers.getRange(last, 3).setValue(XT[i][j+l+1]);
break;
case "¿El XT tiene dominio del tema?": 
case "O XT tinha domínio do tema?": baseTrainers.getRange(last, 4).setValue(XT[i][j+l+1]);
break;
case "¿El XT explicó y comunicó los temas correctamente?": 
case "O XT explicou bem os assuntos?": baseTrainers.getRange(last, 5).setValue(XT[i][j+l+1]);
break;
case "¿El XT fue abierto para evacuar dudas?": case "O XT foi aberto para tirar dúvidas?": baseTrainers.getRange(last, 6).setValue(XT[i][j+l+1]);
break;
case "¿La cantidad de práctica aplicada por el XT fue suficiente para aprender los procesos?" :
case"A quantidade de prática aplicada pelo XT foi suficiente para aprender sobre os processos?": baseTrainers.getRange(last, 7).setValue(XT[i][j+l+1]);
break;
default: ok=false;
break; 
}                 
l +=2;       
}       
}
}     
} 
}  
}


编辑

谢谢库珀,我添加了包含更改的代码部分:


var XT = leidas.getRange(1, 1, leidas.getLastRow() - 1, leidas.getLastColumn()).getValues();
for(var i=0;i<XT.length;i++){
if(relevado[i]!="Relevado"){
for(var j=0;j < XT[i].length;j++){
if(XT[i][j]=="Estou deixando feedback sobre:" || XT[i][j]=="Estoy dejando feedback sobre:"){
var last= baseTrainers.getRange(); 
baseTrainers.getRange(last, 2).setValue(XT[i][j+1]);
baseTrainers.getRange(last, 1).setValue(idTurma[i]);
var formula = baseTrainers.getRange(1,8);
formula.copyTo(baseTrainers.getRange(last, 8));

循环从 1var i=1;i<leidas.getLastRow()+1;i++开始

但您的数据:

var relevado= SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Base de datos REPXT").getRange("A:A").getValues();
var idTurma= SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Base de datos REPXT").getRange("B:B").getValues();

采用 2D 数组的形式,因此您将始终错过第一行数据并在最后耗尽数组元素。

尝试遍历数据,而不是循环访问行。 从零开始 for 循环或使用数组 forEach 方法。

从这样开始:

for(var i=0;i<relevado.length;i++)

还可以使用如下范围获取数据:getRange("A:A").getValues()可能会导致数据末尾出现大量 null。 请尝试改用getRange(1,1,sh.getLastRow()).getValues()

相关内容

最新更新