尽我所能我无法破译我正在向表格写新行的问题。我已经多次这样做了,并且我使用Logger.log彻底调试了这个,但我无法解决它。以下是我正在做的事情,代码片段和日志的摘要:
我在做什么:
这是包含一些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; =
答案 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]