向电子表格添加多行 - Google Apps脚本

时间:2017-06-22 09:24:05

标签: google-apps-script google-spreadsheet-api

我希望通过GAS将多行添加到Google工作表中,同时考虑到性能和不受欢迎的可能性。

要为单行实现此目的,我会使用appendRow来解决干预突变的问题,并在单个函数中完成所有操作。

简单示例:

var sheet= SpreadsheetApp.openById(ssId).getSheetByName(sheetName);
sheet.appendRow(["foo", "bar", "foobar"]);

当然要将它扩展到多行,我可以简单地为每一行循环这个函数,尽管GAS最佳实践建议不要这样做。

尝试使用appendRow通过2D数组添加多行是不成功的,并且使用对辅助数组的引用作为进入行的值,从而导致API。

因此,我想问,有没有办法将多行附加到电子表格中,该电子表格仍然可以处理appendRow所做的干预可变性,并尽可能避免循环?

3 个答案:

答案 0 :(得分:9)

编辑:答案不满意

  

在这种情况下,你的答案可悲地不符合我的标准。这种方法可以导致   在行创建和数据之间的工作表的突变   插入。 (即:有人插入数据)。克服这个是关键   appendRow的奖金

原始答案:

您可以使用Range.setValues()方法立即设置值。你只需要获得良好的范围(具有数组长度)和良好的位置(使用sheet.getLastRow() +1方法)。这是一个例子:

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];

var example = [[1,2,3],[4,5,6],[7,8,9]];
sheet.getRange(sheet.getLastRow()+1, 1, example.length, example[0].length).setValues(example);

答案 1 :(得分:5)

我还要确保为此代码段制作一个行和列变量。如果您尝试直接在getrange函数中添加object.length,则GAS有时会抛出错误。即

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var example = [[1,2,3],[4,5,6],[7,8,9]];
var row = example.length;
var column = example[0].length;

sheet.getRange(sheet.getLastRow()+1, 1, row, column).setValues(example);

答案 2 :(得分:1)

您应该查看Sheet Class的官方文档,列出了许多批量行插入方法,其中一种方法可能符合您的标准。如果证明不足,您可能需要查看Advanced Sheet Service

修改

在回复您的评论时,我不相信有一种方法可以批量添加行和数据作为纯粹的原子操作。但是有一种方法可以通过LockService API解决您对干预突变的担忧。此服务允许您阻止对代码块的并发访问,因此对于您的用例,您可以利用批量插入方法创建新行并填充它们而不必担心突变。