使用setValues函数的问题

时间:2019-02-14 18:31:08

标签: google-apps-script google-sheets

使用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个。”

3 个答案:

答案 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以获得一些选项。