我所知



所以如果我有形式的行



在工作表中,必须将其放置为,每次都应放置在顶部

所以如果另一个时间在形式上



数据将像

现在,我使用此代码,但是它将所有数据追加到末尾,并且仅与一行一起工作,我认为我必须遍历表单中的所有行,但是该怎么做呢?

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

最佳答案

没有单个函数可以执行此操作,但是编写一个函数并不难。这是一个例子:

function prependRow(sheet, rowData) {
  sheet.insertRowBefore(1).getRange(1, 1, 1, rowData.length).setValues([rowData]);
}

我实际上会允许一个可选索引,假设我们要在第二行之后插入,跳过标题。
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
}

关于javascript - Google Apps脚本AppendRow至顶部,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28295056/

10-12 05:56