🦾
node.jsから新しいスプレッドシートを作る
やりたいこと
タイトルの通りnode.jsから、新しいスプレッドシートを作成する。
コードを実装する前にすること
- Google APIでSheet APIを有効にして、認証情報をjsonでダウンロードする。
- 認証情報からOAuth2で認可URLを作成する。
- 認可URLで認可されたあと、得られたコードからtokenなどリソースにアクセスするのに必要な情報を取得し、node.js側でリソースアクセスの認可プログラムを書く
- 次のコードを書いて実行する
躓いたコード(出来ないコード)
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);
}
});
-
Create a Spreadsheet / Google https://developers.google.com/sheets/api/guides/create#node.js ↩︎
-
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 ↩︎
-
https://googleapis.dev/nodejs/googleapis/latest/sheets/classes/Resource$Spreadsheets.html ↩︎
Discussion