如何在Google工作表中同步添加行?

我正在使用google-spreadsheet库来访问数据并将数据插入Google表格。我能够添加多行,但是每行的添加顺序都没有特定顺序,我猜这是由于addRow()异步行为造成的。

示例数据为:

let myData = [{id: "1",fname: "John"},{id: "2",fname: "Matt"},{id: "3",fname: "Paul"}]

for (let i = 0; i < myData.length; i++) {
    let row = myData[i];

    // Async call to insert row.
    doc.addRow(sheetIndex,row,(err) => {
        if (err) throw err;    
    });
}

For循环迭代并将每个行对象传递给addRow(),但是它并不关心将每一行插入Googlesheets时的顺序。

我尝试做一个异步等待方法来等待doc.addRow()迭代到下一行对象,但是我没有运气。有没有办法以我通过的相同顺序实现插入?提前致谢! :)

duoluoyouhun 回答:如何在Google工作表中同步添加行?

您应该使用方法append()

let values = [
  [
    // Cell values ...
  ],// Additional rows ...
];
let resource = {
  values,};
this.sheetsService.spreadsheets.values.append({
  spreadsheetId,range,valueInputOption,resource,},(err,result) => {
  if (err) {
    // Handle error.
    console.log(err);
  } else {
    console.log(`${result.updates.updatedCells} cells appended.`);
  }
});

More info there

,

您可能无法等待该函数,因为它没有返回Promise。因此,让我们首先实现该功能。

function asyncAddRow(sheetIndex,row) {
  return new Promise((res,rej) => {
    doc.addRow(sheetIndex,row,(err) => {
      if (err) rej(err);
      else res(true);
    });
  })
}

现在,您不用打电话给doc.addRow,而是打电话给我们的asyncAddRow。由于它返回了承诺,因此您可以立即等待。像这样:

for (let i = 0; i < myData.length; i++) {
  let row = myData[i];

  await asyncAddRow(sheetIndex,row);
}
本文链接:https://www.f2er.com/3166892.html

大家都在问