谷歌应用程序脚本AppendRow到顶部

时间:2015-02-03 09:08:43

标签: javascript google-apps-script google-sheets

据我所知

  

appendRow(rowContents)   将值添加到电子表格的底部   但是如何在电子表格顶部的多行中添加表单中的数据?

所以如果我在表格中有行

  
      
  1. 首先,姓氏,姓名
  2.   
  3. 第二,姓,姓名
  4.   
  5. 三,姓,姓名
  6.   

在表格中,必须将其放置为,并且每次都放在顶部

所以,如果表格中有另一个时间

  
      
  1. 第四,姓氏,姓名
  2.   
  3. 姓氏,姓名
  4.   
  5. 六,姓,姓名
  6.   

将添加

数据

enter image description here

现在我使用这段代码,但是它将所有数据追加到最后并且只能用一行,我想我必须遍历表格中的所有行但是如何做到这一点?

function getValuesFromForm(form){
  var firstName = form.firstName,
      lastName = form.lastName,
      order = form.order,
      sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  sheet.appendRow([order,lastName,firstName]);
}

1 个答案:

答案 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
}