Google Apps Scriptによるプログラム作成(2)


前回私は「Google Scriptによるプログラム作成」という記事を投稿しました。
今回は「今のところ、これができない」という制限事項について、私の分かる範囲でいくつか記述してみます。

Google Scriptからは、Googleドライブにある画像をスプレッドシート上に挿入できない
Google Scriptからスプレッドシート上に画像を挿入するのには、insertImageメソッドを使用します。
このメソッドは画像のURLを引数としています。
ところが、Google Scriptから、Googleドライブ上の画像「そのもの」のURLを取得する方法が今のところありません。
(ファイルオブジェクトのgetUrlメソッドでは、画像そのものではなく、画像の編集画面のURLが返ってきてしまいます)
このため、Google Scriptからは、Googleドライブ上の画像を直接スプレッドシート上に挿入することはできません。
挿入する画像は「Webサーバに一般公開されていること」が前提になっているようです。
スプレッドシートのImage関数についても、画像URLが引数になっており、同様の理由で、Googleドライブ上の画像を表示させることができません。

●処理にはタイムアウト時間がある
1回のボタンクリック処理の開始〜終了までが長いと、処理が途中で止まります。
これはtry〜catchでは捕捉できないようです。またGoogleからメッセージ等も特に表示されず、処理がストップします。
この時間は一定しませんが、私の環境の場合は5分前後の事が多かったようです。
このため、極力処理時間が短くなるようなコーディングをすること、またあらかじめ要件設計の段階で「1回の処理で操作できるデータは○件まで」などの取り決めをしておく必要も出てくるかと思います。

●入力フォーム上でメッセージ(インプット)ボックスを表示すると、フォームが消え以降の処理が止まる
UiAppオブジェクトで作成した入力フォームの表示中に、Google Scriptのメッセージ(インプット)ボックスを使用すると、その時点でフォームが消え、かつ以降の処理が止まってしまいます。

function createForm(){
var app = UiApp.createApplication();
var btn = app.createButton("ボタン");
app.add(btn);
var eh = app.createServerClickHandler("cmdSelect_Click");
btn.addClickHandler(eh);
var sheet = SpreadsheetApp.getActiveSpreadsheet();
sheet.show(app);
}
function cmdSelect_Click(e){
var app = UiApp.getActiveApplication();
Browser.msgBox("メッセージ");
(処理A)
return app;
}

このコードでは、「createForm()でフォームを作成・表示し、フォーム上のボタンをクリックしたらメッセージを出す」ということをしています。
この場合、cmdSelect_ClickのBrowser.msgBoxの時点で、それまで表示していたフォームが消えてしまい、(処理A)以降の処理も実行されなくなってしまいます。
「入力フォームの上にメッセージボックスを表示する」ということはできないようです。

以上、もしこれからGoogle Scriptによる開発を行う方がいらっしゃいましたら、参考になれば幸いです。

ちなみに、私が担当したGoogle Scriptによるシステム開発は、下記システムとなります。

http://msystm.co.jp/user_fuku.html

【株式会社 エム・システム】
本      社  :〒124-0023 東京都葛飾東新小岩8-5-5 5F
           TEL : 03-5671-2360 / FAX : 03-5671-2361
盛岡事業所  :〒020-0022 岩手県盛岡市大通3-2-8 3F
           TEL : 019-656-1530 / FAX : 019-656-1531
E-mail    : info@msystm.co.jp 
URL     : http://msystm.co.jp/
ブログ       : http://d.hatena.ne.jp/msystem/ 
Facebook   : http://www.facebook.com/msysteminc