使用setValues函数的问题

问题描述 投票:0回答:3

使用setValues()函数将数组导出到Google工作表时,我不断收到错误消息。我已经尝试了许多不同的方法来创建我的2D数组,但我仍然会遇到相同的错误。有时我的代码会运行(数组将导出到电子表格)但我仍然会收到错误。

我最初在for循环中使用了setValue()函数,但代码会因为运行时间过长而超时。所以我尝试将所有数据转储到2D数组中,然后将其全部反馈到电子表格中。

尝试将Array创建为空的2D数组

  var outputArray = [[]]

并使用.push将数据填充到其中

尝试使用以下函数创建空数组:

function create2DArray(rows) {
  var arr = [];

  for (var i=0;i<rows;i++) {
     arr[i] = [];
  }

  return arr;
}

并按行添加数据(在rowNumber迭代的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”。

google-apps-script google-sheets
3个回答
0
投票

是否有一个实例,其中一行的列数多于另一行?例如,如果数据中的'row'1为5列(outputArray.length = 5)而第2行为6,则数据需要6列的范围。

如果是这种情况,这里有一些简单的解决方案:

1.如果您在插入数据的位置没有重要数据,您可以在revenueSheet.getMaxColumns()中使用.getRange().setValues()

2.遍历数据集以查找长度最长的行,并将其设置为列数。要做到这一点,请参阅this answer一些选项。


2
投票

您只需要[]而不是[[]],因为您正在将数组推送到outputArray中,并且push确保它在需要时始终会扩展。

尝试

outputArray = [];
outputArray.push([data1, data2, data3]);
outputArray.push([data4, data5, data6]);     

revenueSheet.getRange(2,1,outputArray.length,outputArray.length[]).setValues(outputArray);

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.