結論
「できない」ぽい(?)
参考:Stack Over Flow : How can I share my app script, between google spreadsheets?
- ライブラリとして公開する
- アドオンとして公開する
- Google App Script 側で完結するコードにする(←今度からこうしようと思いました
しかないようにみえます(調べた限りでは).
きっかけ
Excelでぺちぺちやるような処理を自動化したく Google App Script を初めて使ってみました.「じゃあExcelでやればいいじゃないか!」という突っ込みもありますが Javascript がそのままかける,ということで GAS でやってみました.
作ったもの
職場の御飯予約表
- 共有されたシートに,希望者が個数を入力
- 締め切り時間になったら集計して担当者へ連絡
- Spreadsheet にバインドしたscriptを時間トリガで呼び出し
- メールとは別に,担当者からは情報をスマホ経由で確認できるページを用意
- こちらは App Script(Spreadsheetにバインドしない) + HTML で用意(Spreadsheet 全体を開かなくてもよいように)
- Spreadsheet にバインドする/しない2つの違いはこちらがわかりやすいです.
確認画面を App Script + HTML で作る際,すでに Spreadsheet 側にバインドした関数を呼びたい!となったのですが上記の通りでした...頑張って App Script だけで完結するようにコーディングしたほうが始末が良い気がします.
銀行振り込み記録(CSV)の弥生データへの変換
- 銀行WebサイトからダウンロードできるCSVファイルを弥生でインポートできるCSV形式に変換
- これの Spreadsheet 版です
- 頼まれもの
別に Excel の VB マクロでもできるのでしょうが,普段見慣れている Javascript で書ける,というのは個人的には大きかったです.あと銀行振り込みの記録(例えば,"スイドウ", "XXガス", "YYデンリョク")から勘定科目("水道光熱費")への変換も大体のものはいけました.変換の履歴を取り続ければ,ほぼ全部自動でできそうです.
使ってみて思ったこと
- 見慣れた Javascript を使える
- 外部連携が簡単・強力
とくに2が非常に強力だと思いました.定期実行やメール送信,所定のURLからデータを取得するなどの処理を簡単に記述できます.それゆえに急に自分がスゴイ出来る奴に思えてしまい,書いていてなんだか楽しかったです.
例えば今回作成した御飯予約表ではメールで人数を伝達でしたが,電話APIのtwillioと連携して自動で出前注文 とかも簡単にできそうです.また後者の銀行振り込み記録についても,自動ログイン→ダウンロード→CSV変換までワンボタンで実行できるところまで落とし込めそうです.
マクロボタン→カスタムメニュー
Excel だと「マクロボタンを配置」でスクリプトの呼び出しを簡素化しましたが,Spreadsheet では「カスタムメニューに追加」が良いように思いました.
// 日付を挿入
function insertDate() {
var tSheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
var tCell = tSheet.getRange(1, 1, 1, 1);
var tDate = new Date();
// Cell[A:0]に今日の日付を追加
tCell.setValue(tDate);
}
// スプレッドシートメニューに追加
function onOpen(){
var tSpreadSheet = SpreadsheetApp.getActiveSpreadsheet();
var tMenuEntries = [{name: "日付を挿入", functionName: "insertDate"}];
tSpreadSheet.addMenu("マイメニュー", tMenuEntries);
}