🦾

node.jsから新しいスプレッドシートを作る

2022/01/31に公開

やりたいこと

タイトルの通りnode.jsから、新しいスプレッドシートを作成する。

コードを実装する前にすること

  1. Google APIでSheet APIを有効にして、認証情報をjsonでダウンロードする。
  2. 認証情報からOAuth2で認可URLを作成する。
  3. 認可URLで認可されたあと、得られたコードからtokenなどリソースにアクセスするのに必要な情報を取得し、node.js側でリソースアクセスの認可プログラムを書く
  4. 次のコードを書いて実行する

躓いたコード(出来ないコード)

Sheet APIの公式[1]のコードや、Stackoverflowの記事[2]のコードではうまく動かない。Sheet APIの公式コードを動かすと、以下のようなエラーが出る。

GaxiosError: Invalid JSON payload received. Unknown name "properties[title]": Cannot bind query parameter. Field 'properties[title]' could not be found in request message.

要するに、propertiesというのが見つからない(不要である)と言われている。

解決方法

少し面倒だけど、Google APIのリファレンス[3]を参照して、propertiesの上位にrequestBodyを入れないといけないことがわかった。丁寧に例まで書いてくれているので参考に以下のコードを書いて動かしたところ、期待通り新しいスプレッドシートが得られる。

const sheets = google.sheets({ version: "v4", auth });
sheets.spreadsheets.create({
    requestBody: {
	properties: {
	    title: "作ってみた"
	}
    }
}, (err, spreadsheet) => {
    if(err) {
	console.error(err);
    } else {
	console.log("new spreadsheet");
	console.log(spreadsheet);
    }
});
脚注
  1. Create a Spreadsheet / Google https://developers.google.com/sheets/api/guides/create#node.js ↩︎

  2. How to Create New Google Spreadsheet Using googleapis in Node.js https://stackoverflow.com/questions/59641637/how-to-create-new-google-spreadsheet-using-googleapis-in-node-js ↩︎

  3. https://googleapis.dev/nodejs/googleapis/latest/sheets/classes/Resource$Spreadsheets.html ↩︎

Discussion