この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
node.jsでGoogle Spread Sheetにアクセス
Google Spreadsheetとは
Google スプレッドシートとは、Goolgeの提供するサービスで、
Webベースの表計算ソフトです。ブラウザを使用し、複数のユーザーとリアルタイムに編集することができます。
また、MSのエクセルに近い機能も持ち、xls(xlsx)ファイルを読み込むことも可能になっています。
手軽にシートを共有でき、APIでアクセスする手段も提供されています。
今回はnode.jsからサービスアカウント形式の認証で、Googleスプレッドシートにアクセスしてみます。
##環境構築方法
今回使用した動作環境は以下のとおりです。
- OS : MacOS X 10.10.5
- Node : v4.1.2
データとAPIを使用する準備
1.Googleスプレッドシートの作成
まずは、適当なスプレッドシートを作成します。
ワークシート名はtest、シート名はmysheet1とし、下記のようにセルデータを入力しました。
id | name | price |
---|---|---|
1 | りんご | 100 |
2 | バナナ | 150 |
3 | みかん | 80 |
2.Google Developer コンソールでAPI許可とKeyファイルのダウンロード
Google Developerコンソールにアクセスし、プロジェクトを作成します。
作成したプロジェクトを選択し、サイドバーのメニューからAPI->Drive APIを選択して、Drive APIを有効化しましょう。
次にプロジェクトを選択した状態で、メニューから認証情報->認証情報を追加 ボタンを押します。
「サービスアカウント」を選択し、JSON形式を選択して作成ボタンを押すと、JSONファイルがダウンロードされます。
3.jsonに記述してあるメールアドレスをアクセス許可する
最後に、Googleスプレッドシート画面で共有ボタンを押し、
2でダウンロードしたJSONに書いてある「client_email」のアドレスを追加します。
なお、ここで許可するアカウントは、APIアクセス用に発行されたdeveloper.gserviceaccount.comドメインのアカウントです。
弊社のように、セキュリティの関係上、外部ドメインとの共有ができない場合、今回紹介する方法は使用できないので注意してください。
(OAuth2を使用すればスプレッドシートの共有をしなくてもAPIアクセス可能です。次回紹介予定)
nodeアプリの作成
準備ができたので、node.jsプログラムを作成してみましょう。
モジュールのインストール
まずはGoogleスプレッドシートにアクセスするためのモジュールをnpmでインストールしましょう。
% npm install npm i google-spreadsheet
サンプル作成
var GoogleSpreadsheet = require('google-spreadsheet');
var my_sheet = new GoogleSpreadsheet(<ワークシートのID>);
var credentials = require(<3でダウンロードしたJSONのパス>);
ワークシートIDは、スプレッドシートを開いたURLのdとeditの間にある文字列です。
先ほどDeveloperコンソールからダウンロードしたJSONファイルも使用するので、パスを控えておきましょう。
useServiceAccountAuth関数を使用することで、JSONを元にした情報で認証を行います。
そして、getInfo関数を使うとシート情報を取得することが可能になります。
var sheet;
my_sheet.useServiceAccountAuth(credentials, function(err){
my_sheet.getInfo(function(err, data){
console.log(data);
sheet = data; //あとから使えるように外部スコープに保存
});
});
getInfoで取得したオブジェクトには全部のシート情報がはいっているので、タイトルで対象のシートを判定しています。
対象のシートでgetRows関数を使用することで、行毎にデータを取得できます。
for(var i in sheet.worksheets) {
if(sheet.worksheets[i].title === 'mysheet1') {
sheet.worksheets[i].getRows( function( err, rows ) {
for(var i in rows) {
console.log(rows[i]);
}
});
}
}
また、getCells関数を使用すれば、すべてのセルごとにデータを取得できます。
なお、データを追加する場合にはaddRow関数を使用します。
sheet.addRow( <行数>, { <カラム名>: '値'} );
まとめ
今回はシート共有を使用してGoogle SpreadSheetにアクセスする方法について紹介しました。
シート共有を使うことで、簡単にアクセスできることがわかります。
次回はOAuth2を使用してGoogle SpreadSheetにアクセスする方法について紹介します。