Google Script Errror:使用setValues时“范围宽度不正确”

时间:2017-12-31 17:08:58

标签: javascript arrays google-apps-script

尽我所能我无法破译我正在向表格写新行的问题。我已经多次这样做了,并且我使用Logger.log彻底调试了这个,但我无法解决它。以下是我正在做的事情,代码片段和日志的摘要:

我在做什么:

  • 向工作表添加行(在现有行下方)
  • 存储在数组中的73个新行:Grade Rows
  • 尝试将新行写入工作表时,会收到以下错误: 范围宽度不正确,1应为26

这是包含一些Logger.logs的代码:

var BeginningRow = LastSGRowSheet + 1;

var EndingRow = BeginningRow + SGPushKtr -1;

Logger.log("BeginningRow =>" + BeginningRow + "<=, SGPushKtr =>" + SGPushKtr + "<=, Ending Row =>" + EndingRow + "<=");

var GradesRangeString = 'A' + BeginningRow + ':' + LastStudentGradesColumnLetter + EndingRow;

Logger.log("GradesRangeString =>" + GradesRangeString + "<=");

StudentGradeSheet.getRange(GradesRangeString).setValues(GradeRows);

错误发生在最后一行代码中。

这是日志:

  

17-12-31 11:51:15:763 EST] BeginningRow =&gt; 364&lt; =,SGPushKtr =&gt; 73&lt; =,Ending Row =&gt; 436&lt; =   [17-12-31 11:51:15:764 EST] GradesRangeString =&gt; A364:Z436&lt; =

3 个答案:

答案 0 :(得分:1)

让我们说你的数据数组是dA然后该数组中的行数是dA.length并假设它是一个矩形数组,那么列数是vA [0] .length。所以你的输出命令必须是这样的。

sheet.getRange(firstRow,firstColumn,dA.length,dA[0].length).setValues(dA);
  

如果您想了解有关此问题的更多信息,请查看this

您还可以在循环中一行一行地将每一行追加到当前工作表。

答案 1 :(得分:0)

如果没有看到所有代码,很难知道为什么GradeRows与您的范围不匹配。 使用Cooper的getRange参数可能会显示您的问题,并且会阻止您在更改代码时更新行和列变量。有时我遇到的另一个问题是setValues数组需要与范围完全相同的尺寸。如果一行具有不同的长度,则它将失败。如果我用来创建行数组的逻辑可能导致不同的长度,我使用下面的函数来确保我的数组在写入工作表之前是对称的。它也有助于调试。

/** 
 * Takes a 2D array with element arrays with differing lengths
 * and adds empty string elements as necessary to return 
 * a 2D array with all element arrays of equal length.
 * @param {array} ar
 * @return {array}
 */
function symmetric2DArray(ar){
  var maxLength;
  var symetric = true;
  if (!Array.isArray(ar)) return [['not an array']];
  ar.forEach( function(row){
    if (!Array.isArray(row)) return [['not a 2D array']];
    if (maxLength && maxLength !== row.length) {
      symetric = false;
      maxLength = (maxLength > row.length) ? maxLength : row.length;
    } else { maxLength = row.length }
  });
  if (!symetric) {
    ar.map(function(row){
      while (row.length < maxLength){
        row.push('');
      }
      return row;
    });
  }
  return ar
}

答案 2 :(得分:0)

如何使用appendRow()?这样您就不需要对范围进行大量计算。您可以遍历数据并逐行添加。像这样:

myDataArr = [[1,2],[3,4],[5,6]]
myDataArr.forEach(function(arrayItem){
  sheet.appendRow([arrayItem[0],arrayItem[1]])
})
// This will output to the sheet in three rows. 
// [1][2]
// [3][4]
// [5][6]