みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
Google Apps Scriptでダイアログを使ったcsvファイルアップローダーを作成する方法をお伝えするシリーズです。
前回の記事はこちら。
ファイルアップロードが完了したらダイアログ自身を閉じる方法をお伝えしました。
ただ、ファイルを選択せずに「アップロード」したとき、アップロードは失敗するはずなのですが、どうなるんでしょうか…?
ということで、今回はGASのダイアログでファイルアップロードが失敗したらアラートを表示する方法をお伝えします。
では、行ってみましょう!
前回のおさらい
では、前回のコードのおさらいです。
以下がダイアログを作成するHTMLファイル「dialog.html」です。
<!DOCTYPE html> <html> <head> <base target="_top"> </head> <body> <form> <input name="myFile" type="file"> <button onclick="uploadCsv(this.parentNode);">アップロード</button> </form> <script> function uploadCsv(form) { google.script.run.withSuccessHandler(function(){ google.script.host.close(); }).uploadCsv(form); } </script> </body> </html>
ポイントはscriptタグの中の、uploadCsv関数。
サーバー側の同名のuploadCsv関数を呼びつつ、その呼び出しが無事に完了したらgoogle.script.run.closeメソッドでダイアログ自身を閉じるというというものです。
サーバー側の「コード.gs」は以下のとおりです。
function showDialog(){ var html = HtmlService.createHtmlOutputFromFile('dialog'); SpreadsheetApp.getUi().showModalDialog(html, "CSVアップロード"); } function uploadCsv(form) { var blob = form.myFile; var csvText = blob.getDataAsString(); var values = Utilities.parseCsv(csvText); SpreadsheetApp.getActiveSheet().getRange(1, 1, values.length, values[0].length).setValues(values); }
showDialog関数を実行すると以下のダイアログを表示します。
ダイアログの「ファイルを選択」からアップロードするCSVファイルを選び、「アップロード」することで、スプレッドシートにCSVの内容を展開します。
ファイルアプロードが失敗したときの処理
例えば、「ファイルを選択」で何のファイルも選択しなかった場合、「アップロード」ボタンをクリックすると、どうなるでしょうか?
やってみると…上記画面のまま何も起きません。
スクリプトエディタで「表示」→「実行トランスクリプト」で、スクリプトの実行のようすを確認すると…
以下のようなエラーが発生していることが確認できました。
実行に失敗: TypeError: undefined からプロパティ「length」を読み取れません。
ただ、ダイアログを操作しているユーザーには、このようなエラーが起きていることがわからないんですね。
ということで、エラーが起きたときに、それをユーザーにお知らせするように変更をしていきたいと思います。
サーバー側の呼び出しが失敗したら関数を実行する
前回の記事で、サーバー側の関数呼び出しが成功したら指定した関数を実行する、google.script.runのwithSuccessHandlerメソッドを紹介しました。
それに対して、サーバー側の関数呼び出しが失敗したら指定した関数を実行する、withFailureHandlerメソッドが存在しています。
書式はこちらです。
それで、withSuccessHandlerメソッドも、withFailureHandlerメソッドも、ともにgoogle.script.runオブジェクトを返しますので、以下のように連続してつなげて記述が可能です。
google.script.run.withSuccessHandler(function(){ //成功したときの処理 }).withFailureHandler(function(){ //失敗したときの処理 }).uploadCsv(form);
エラーが発生したらアラートを表示する
ですから、「dialog.html」のscriptタグ内のuploadCsv関数を以下のように変更すれば、エラーのときにユーザーにアラートを表示するようになります。
<!DOCTYPE html> <html> <head> <base target="_top"> </head> <body> <form> <input name="myFile" type="file"> <button onclick="uploadCsv(this.parentNode);">アップロード</button> </form> <script> function uploadCsv(form) { google.script.run.withSuccessHandler(function(){ google.script.host.close(); alert('アップロードしました'); }).withFailureHandler(function(){ alert('アップロードに失敗しました'); }).uploadCsv(form); } </script> </body> </html>
では、動作確認をしてみましょう。
ファイルを選択せずに「アップロード」ボタンをクリックすると…
アラートの表示を確認できます。
まとめ
以上、GASのダイアログでファイルアップロードが失敗したらアラートを表示する方法をお伝えしました。
withSuccessHandlerメソッドとwithFailureHandlerメソッドはセットで覚えちゃうとよいですね。
これにて、CSVファイルアップロードダイアログの作り方はシリーズ完了となります。
使いどころはそこそこあると思いますので、どうぞご活用くださいませ。
また、便利なツールを思いついたら紹介しますね。
どうぞお楽しみに!
連載目次:GASのダイアログでcsvファイルアップローダーを作ろう
Google Apps Scriptでダイアログを作成する方法はいくつかありますが、HTMLサービスとUiサービスを組み合わせると自由で多機能なダイアログが作れます。このシリーズではそんなダイアログの作り方を易しく紹介していきます。- Google Apps Scriptでダイアログを作るいくつかの方法と基礎知識
- GASで最も簡単なHTMLサービスによるダイアログを作成する方法
- GASのダイアログで作成するファイルアップローダーの部品を配置する方法
- GASのダイアログでボタンをクリックしてアラート表示を動作させる方法
- GASのダイアログのボタンクリックでサーバー側の関数を呼び出すgoogle.script.run
- GASのダイアログのデータをフォーム要素を渡すことでまとめてサーバー側に渡す方法
- GASのダイアログでアップロードしたファイルをBlobオブジェクトとしてサーバー側に渡す方法
- Google Apps ScriptでCSVファイルのデータをスプレッドシートに展開する方法
- GASのダイアログをファイルをアップロードが成功したら閉じる方法
- GASのダイアログでファイルアップロードが失敗したらアラートを表示する方法