LoginSignup
197
157

More than 3 years have passed since last update.

GoogleAppsScriptでSQLライクにスプレッドシートを扱えるライブラリを作りました。

Last updated at Posted at 2016-03-24

SpreadSheetSQL

========================================
現在既にこのライブラリはメンテナンスしていません。
Apache License 2.0で公開しているため、そのライセンスの範囲内で利用してください。
========================================

GoogleAppsScriptGoogleSpreadSheets をDBとして扱う際に
取得、変更、削除に手間がかかっていたので、SQLっぽく記述できるライブラリを作りました。

Github: https://github.com/roana0229/spreadsheets-sql
Document: https://script.google.com/macros/library/d/17p1ghyOkbWOhdE4bdBFhOXL079I-yt5xd0LAi00Zs5N-bUzpQtN7iT1a/6

インストール方法

ProjectID: MAoZrMsylZMiNUMljU4QtRHEMpGMKinCk
ScriptID: 17p1ghyOkbWOhdE4bdBFhOXL079I-yt5xd0LAi00Zs5N-bUzpQtN7iT1a

旧エディタ: GoogleAppsScript上でリソース > ライブラリ > ProjectIDを入力 > 選択 > 最新バージョンを選択
新エディタ: ライブラリ > ScriptIDを入力 > 選択 > 最新バージョンを選択

できること

普段見るDBのViewのように1行目にカラム名を記述し、そのカラム名に対応する形でSQLを叩くことができます。

スクリーンショット 2016-03-25 00.05.15.png

コード例

インスタンスの生成

var id = 'SpreadSheets ID';
var name = 'SpreadSheets SheetName';

SpreadSheetsSQL.open(id, name)

行の取得

SpreadSheetsSQL.open(id, name).select(['name', 'age', 'married', 'company']).result();

クエリ結果 (json array)

[{
  name: 'Gail',
  age: 20,
  married: true,
  company: 'Google'
},{
  name: 'Plato',
  age: 18,
  married: false,
  company: 'Yahoo'
}]

オプション(filter,orderBy)

SpreadSheetsSQL.open(id, name).select(xxx).filter('age < 20').result();
SpreadSheetsSQL.open(id, name).select(xxx).orderBy(['name', 'age']).result();
SpreadSheetsSQL.open(id, name).select(xxx).filter(xxx).orderBy(xxx).result();

行の追加

SpreadSheetsSQL.open(id, name).insertRows([
  {name: 'Colt', age: 30, married: false, company: 'Microsoft'},
  {name: 'Smith', age: 24, married: true, company: 'Adobe'}
]);

行の更新

SpreadSheetsSQL.open(id, name).updateRows({
  company: 'Adobe'
}, 'name = Colt');

行の削除

SpreadSheetsSQL.open(id, name).deleteRows('name = Colt AND company = Adobe');

主なメソッド

  • open(): シートの取得
  • select(): 取得するカラム名の選択
  • filter(): 取得するデータのフィルタリング
  • orderBy(): 取得するデータのソート
  • result(): クエリ結果の取得
  • insertRows(): データの追加
  • updateRows(): データの変更
  • deleteRows(): データの削除

フィルタリングに利用可能な記号

Symbol Example
= age = 20
< age < 20
<= age <= 20
> age > 20
>= age >= 20
IN company IN Apple,Google
OR company = Apple OR company = Google
AND company = Apple AND age > 20

備考

SlackのBotを作成する際にGoogleAppsScriptを利用して、GoogleSpreadSheetsをDBとして扱っています。
Qiitaのfeedの同じ投稿の被りや記事更新による連続投稿を対処するために
SpreadSheetsに溜め込み一定時間毎に投稿させるようにしています。

ただ、生のSpreadSheetsをDBとして扱うのはコードが分かり辛くなるため
一度、FusionTablesを利用してみたのですが制限が厳しすぎて
じゃあ、SpreadSheetでSQLを叩ける用にしたらいいじゃないかと思い作成しました。

このライブラリを使えば、SpreadSheetsをDBとして扱う際の手間がかなり楽になると思います!
機能追加、バグのissueやプルリクはいつでも歓迎しています。
良いGoogleAppsScriptライフを!

197
157
15

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
197
157