使用setValues()
函数将数组导出到Google表格时,我一直收到错误消息。我尝试了多种方法来创建2D数组,但仍然会遇到相同的错误。有时我的代码会运行(数组将导出到电子表格),但我仍然会收到错误。
我最初在for循环中使用setValue()
函数,但是由于运行时间太长,代码会超时。因此,我尝试将所有数据转储到2D数组中,然后一次将其全部馈送到电子表格中。
尝试将数组创建为空的2D数组
var outputArray = [[]]
并使用.push
将数据填充到其中
尝试使用以下功能创建空数组:
function create2DArray(rows) {
var arr = [];
for (var i=0;i<rows;i++) {
arr[i] = [];
}
return arr;
}
并按行添加数据(在按行号迭代的for循环内)
outputArray[rowNumber] = [data1, data2, data3,...]
使用与上面相同的功能创建空数组和创建中间数组,然后将其放入输出数组
outputArrayIntermediate[0] = data1;
outputArrayIntermediate[1] = data2;
outputArrayIntermediate[2] = data3;
outputArrayIntermediate[3] = data4;...
outputArray[rowNumber] = outputArrayIntermediate;
这是不断发生错误的地方
var setRows = outputArray.length;
var setColumns = outputArray[0].length
revenueSheet.getRange(2,1,setRows,setColumns).setValues(outputArray);
当我包含setColumns变量时,出现错误: “数据中的列数与范围中的列数不匹配。数据为0,但范围为11。” 这样仍会将数据填充到电子表格中。
当我不包括setColumns变量时,出现错误: “数据中的列数与范围内的列数不匹配。数据有11个,但范围有1个。”
答案 0 :(得分:1)
您只需要[]而不是[[]],因为您是将数组推入outputArray,并且推推可确保在需要时始终将其展开。
尝试
outputArray = [];
outputArray.push([data1, data2, data3]);
outputArray.push([data4, data5, data6]);
revenueSheet.getRange(2,1,outputArray.length,outputArray.length[]).setValues(outputArray);
答案 1 :(得分:0)
也许这会帮助您:
function createSSData(numrows,numcols) {
var numrows=numrows || 20;
var numcols=numcols || 20;
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
var values=[];
for(var i=0;i<numrows;i++) {
values[i]=[];
for(var j=0;j<numcols;j++) {
values[i].push(Utilities.formatString('row: %s,col: %s',i+1, j+1));
}
}
sh.getRange(1,1,values.length,values[0].length).setValues(values);
}
答案 2 :(得分:0)
有没有这样的实例,一排比另一排多?例如,如果数据中的“行” 1为5列(outputArray.length
= 5),而行2为6,则数据需要具有6列的范围。
在这种情况下,为简单起见,这是一些解决方案:
1。。如果插入数据的右侧没有重要数据,则可以在revenueSheet.getMaxColumns()
中使用.getRange().setValues()
。
2。。遍历数据集以找到长度最长的行,并将其设置为列数。为此,请参见this answer以获得一些选项。