据我所知
appendRow(rowContents) 将值添加到电子表格的底部 但是如何在电子表格顶部的多行中添加表单中的数据?
所以如果我在表格中有行
- 首先,姓氏,姓名
- 第二,姓,姓名
- 三,姓,姓名
醇>
在表格中,必须将其放置为,并且每次都放在顶部
所以,如果表格中有另一个时间
- 第四,姓氏,姓名
- 姓氏,姓名
- 六,姓,姓名
醇>
将添加
数据
现在我使用这段代码,但是它将所有数据追加到最后并且只能用一行,我想我必须遍历表格中的所有行但是如何做到这一点?
function getValuesFromForm(form){
var firstName = form.firstName,
lastName = form.lastName,
order = form.order,
sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
sheet.appendRow([order,lastName,firstName]);
}
答案 0 :(得分:17)
没有一个功能可以做到这一点,但写一个并不困难。这是一个例子:
function prependRow(sheet, rowData) {
sheet.insertRowBefore(1).getRange(1, 1, 1, rowData.length).setValues([rowData]);
}
我实际上允许使用可选索引,假设我们想在第2行之后插入,跳过标题。
function insertRow(sheet, rowData, optIndex) {
var index = optIndex || 1;
sheet.insertRowBefore(index).getRange(index, 1, 1, rowData.length).setValues([rowData]);
}
但是appendRow
还有另一个有趣的特征,它是并发安全的。这意味着它可以并行多次触发,不会搞砸。为了使我们的函数同时安全,你必须lock
,如下所示:
function insertRow(sheet, rowData, optIndex) {
var lock = LockService.getScriptLock();
lock.waitLock(30000);
try {
var index = optIndex || 1;
sheet.insertRowBefore(index).getRange(index, 1, 1, rowData.length).setValues([rowData]);
SpreadsheetApp.flush();
} finally {
lock.releaseLock();
}
}
然后,要在你的代码中使用它,只需调用..
function getValuesFromForm(form){
//...
insertRow(sheet, [order,lastName,firstName]); //could have passed an extra `2` parameter to skip a one line header
}