Nodejs谷歌表单API

dbf7pr2w  于 2023-01-16  发布在  Node.js
关注(0)|答案(3)|浏览(95)

有人知道在哪里可以找到一个使用Google Sheets API写入Google Sheets的好例子吗?我已经使用了https://developers.google.com/sheets/api/quickstart/nodejs,并且成功地能够从Google Sheets中读取,但是我在弄清楚如何写入Google Sheets时遇到了麻烦。

ncecgwcz

ncecgwcz1#

假设您已经获得了授权的oAuth2Client,下面的方法对我来说是有效的。

const { google } = require('googleapis');
const sheets = google.sheets({ version: 'v4', oAuth2Client});

async function writeSample() {
  let title = "NewSpreadsheet";
  try {
    var spreadsheet = await createSheet(title);
    console.log(`Spreadsheet ID: ${spreadsheet.spreadsheetId}`);

    range = "Sheet1!A1:D5";
    let valueInputOption = "RAW";
    values = [
      ["Item", "Cost", "Stocked", "Ship Date"],
      ["Wheel", "$20.50", "4", "3/1/2016"],
      ["Door", "$15", "2", "3/15/2016"],
      ["Engine", "$100", "1", "30/20/2016"],
      ["Totals", "=SUM(B2:B4)", "=SUM(C2:C4)", "=MAX(D2:D4)"]
    ];
    var result = await writeSheet(spreadsheet.spreadsheetId, range, valueInputOption, values);
    console.log('%d cells updated.', result.updatedCells);
    return result;
  }
  catch (error) {
    console.log(error);
  }
}

async function createSheet(title) {
  var resource = {
    properties: {
      title
    },
  };
  return sheets.spreadsheets.create({ resource, fields: 'spreadsheetId', })
    .then(response => response.data);
}

async function writeSheet(spreadsheetId, range, valueInputOption, values, ) {
  resource = {
    values
  };
  return sheets.spreadsheets.values.update({ spreadsheetId, range, valueInputOption, resource, })
    .then(response => response.data);
}
hgc7kmma

hgc7kmma2#

Sheets API在Google Sheets上有关于Writing a single range的示例。有些概念你必须理解,虽然像A1符号。
除了指南中的示例,我还编写了JS代码来演示在这个SO线程上的工作表上的书写。这将是非常有用的,因为NodejS也使用JS。

2o7dmzc5

2o7dmzc53#

是的,我也读过野鬼的参考资料:在你完成一个程序之前需要一些时间。
但我成功地完成了以下功能:

    appedData ()
    deleteRow () (I can post them if you wish)

我需要插入:temp、humidity和pressure放在一行中,并组合删除最旧的一行(第1行),我将这两个函数放在listMajors(...)原来所在的同一行(在quickstart,js中),然后将其放入一个循环中:坏主意:函数是异步的,因此您不知道一个函数何时完成,另一个函数何时开始,console.log()打印显示:

 appedData ()
 deleteRow ()
 appedData ()
 deleteRow ()
 deleteRow ()
 appedData ()
 deleteRow ()
 appedData ()
 appedData ()

所以有时候appedData()和deleteRow()按真实的顺序,有时候appedData()按顺序两次或更多次,其他时候appedData()按顺序两次或更多次deleteRow()。
因此,我将quickstart.js更改为同步函数,而不是异步函数:我删除了将fs.readFile替换为fs.readFileSync的回调,它似乎可以工作

相关问题