5

使用来自 google-spreadsheet 的 google-apps-script,我正在尝试使用 fetchUrl 获取数百行数据并使用 sheet.appendRow 将它们粘贴到我的工作表中。

获取数据并拆分为数组是可以的。但是将它们逐行附加到工作表偶尔会失败而没有任何错误并导致空行。

这是重现问题的非常简单的示例。

function appendTest() {
  var sSheet = SpreadsheetApp.getActiveSpreadsheet();
  sheet = SpreadsheetApp.setActiveSheet(sSheet.getSheets()[2]);
  for (var i = 0; i <= 100; i++) {
      sheet.appendRow([i, 1, 2, 3, 4, 5]);
  }
}

大约 5 或 10 行,有时会变空。插入 Utilities.sleep() 似乎也不起作用。

有没有人有任何想法摆脱这种情况?先感谢您。

4

3 回答 3

5

您可以尝试像这样使用批量写入工作表

function appendTest() {
  var target = new Array()
  var sSheet = SpreadsheetApp.getActiveSpreadsheet();
  sheet = SpreadsheetApp.setActiveSheet(sSheet.getSheets()[2]);
  for (var i = 0; i <= 100; i++) {
      target.push(['some data','in some columns','bla bla']);
  }
sheet.getRange(sSheet.getLastRow()+1,1,target.length,target[0].length).setValues(target);
}

请注意,如果您认为工作表太“短”,您也可以在循环中附加空行。

编辑:按照迈克尔相关的回答,使用添加必要的行会是一个更好的主意sheet.insertRowsAfter(sheet.getMaxRows(), target.length)

于 2012-11-22T10:57:00.890 回答
4

在循环中使用 appendRow 是不稳定的,不是最佳实践。请参见:

https://productforums.google.com/forum/#!topic/docs/y0E9PB_VTJw

讨论这个问题。

于 2012-11-22T16:10:36.413 回答
2

只是一个小评论:我在循环中使用 appendRow,一次最多可追加 30 行。该脚本已每天使用大约一周。

有趣的是,在测试脚本期间,当我将其设置为附加大约 100 行时,我也看到行丢失了。但是在对目标电子表格进行简单的手动刷新后,我没有看到任何缺失的行。所以我认为这些行实际上是附加的,但是那个错误?在于他们的展示。

于 2012-11-25T00:10:47.953 回答