dbr*_*dbr 9 google-apps-script google-spreadsheet-api
我希望通过GAS将多行附加到谷歌表,同时考虑到性能和不希望的可能性.
为了实现这一目标,我将使用appendRow这个解决干预突变的问题,并在单个函数中完成所有操作.
简单示例:
var sheet= SpreadsheetApp.openById(ssId).getSheetByName(sheetName);
sheet.appendRow(["foo", "bar", "foobar"]);
Run Code Online (Sandbox Code Playgroud)
当然要将其扩展到多行,我可以简单地为每一行循环遍历此函数,尽管GAS最佳实践建议不要使用这些实践.
尝试使用appendRow通过2D阵列添加多行是不成功的,并且使用对辅助数组的引用作为进入行的值导致API.
因此,我想问,有没有办法将多行附加到电子表格中,该电子表格仍然可以处理干预的可变性,appendRow并尽可能避免循环?
Pie*_*ard 10
编辑:答案不满意
在这种情况下,你的答案可悲地不符合我的标准.此方法可能导致行创建和数据插入之间的工作表发生突变.(即:有人插入数据).克服这个是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);
Run Code Online (Sandbox Code Playgroud)
小智 7
我还要确保为此代码段制作一个行和列变量。如果您尝试直接在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);Run Code Online (Sandbox Code Playgroud)
您应该查看Sheet Class的官方文档,其中列出了许多批量行插入方法,其中一种可能符合您的条件。如果这还不够,您可能需要考虑高级纸张服务。
编辑
针对您的评论,我不认为有一种方法可以作为纯粹的原子操作批量添加行和数据。但是有一种方法可以通过LockService API来解决您对干预突变的担忧。该服务允许您防止并发访问代码块,因此对于您的用例,您可以利用批量插入方法来创建新行并填充它们,而不必担心突变。
| 归档时间: |
|
| 查看次数: |
9539 次 |
| 最近记录: |