6
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Google Sheets API を使ってNodejsからスプレッドシートを操作

Last updated at Posted at 2018-11-23

要旨

・GoogleAppsScriptを使用しなくてもスプレッドシートを操作できる

・ヘッダを元に列を指定して値をセットする場合はGASの方がずっとやりやすい(必ず1行目にヘッダがなくてはダメ、大文字英字やアンダーバーを使った文字列のヘッダ指定ができない)

・6分の壁とか気にしなくていいのは楽

・GASよりは安定してる気がするがやはりまだ不安定感が残る

・NodejsからGoogle Sheets APIを使う用のパッケージが複数あるが、いずれも若干のバグあり
(今回使用したパッケージは一括更新のbulkUpdateCellsが動作しない)

使用パッケージ

google-spreadsheet (ver. 2.0.6)
https://www.npmjs.com/package/google-spreadsheet

シートサンプル

Google Sheet API Qiita説明用サンプル
https://docs.google.com/spreadsheets/d/1pNmXvx5vL2pEICe6_2PVFfuQ2WYoRaVA7K05i9s8-Aw/edit?usp=sharing

事前注意

こちらの記事を元にAPI認証情報のJSONを取得しておいてください
(大変参考にさせて頂きました。この場を借りてお礼申し上げます)
https://qiita.com/howdy39/items/ca719537bba676dce1cf

コード

sample.js
async function sample() {
	try {
		const GoogleSpreadsheet = require('google-spreadsheet');
		const creds = require('./google-generated-creds.json'); //API認証情報JSONを同ディレクトリに置いておく

		var spreadsheet_id = '1pNmXvx5vL2pEICe6_2PVFfuQ2WYoRaVA7K05i9s8-Aw'; //スプレッドシートのID
		var worksheet_name = "シート2"; //操作したいワークシートのシート名

		var book = new GoogleSpreadsheet(spreadsheet_id); //インスタンス
		var spreadsheet; //スプレッドシート
		var worksheet; //ワークシート
		var rcnt1; //ループカウンタ1
		var rcnt2; //ループカウンタ2

		//認証を通しスプレッドシートの情報取得して外部スコープの変数に保存
		book.useServiceAccountAuth(creds, function(error) {
			if (error !== null) {
				throw new Error(error);
			}
			book.getInfo(function(error, data) {
				if (error !== null) {
					throw new Error(error);
				}
				spreadsheet = data;
			});
		});

		//指定した名前のスプレッドシートの値を更新する
		for (rcnt1 in spreadsheet.worksheets) {
			if (spreadsheet.worksheets[rcnt1].title === worksheet_name) {
				spreadsheet.worksheets[rcnt1].getRows({
					offset: 1, //何も指定しなければ2行目から読み込むので1を指定すると3行目から読み込む
					limit: 20, //途中で空白行が現れれば20行以下でも読み込み中止
				}, function(error, rows) {
					if (error !== null) {
						throw new Error(error);
					} else {
						for (rcnt2 in rows) {
							rows[rcnt2].sku = "new_sku"; //1行目の値が"sku"の列の(rcnt2 + 1 + offset)行目の値を"new_sku"に変更
							rows[rcnt2].price = 19800;
							rows[rcnt2].save();
						}
					}
				});
			}
		}

		return Promise.resolve(0);
	} catch(error) {
		console.error(error);
		return Promise.reject(1);
	}
}


6
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?