質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

解決済

GASでスプレッドシートの処理が遅いです。改善できるかどうか、スクリプトを見ていただきたいです。

tak123
tak123

総合スコア17

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

2回答

-1評価

0クリップ

782閲覧

投稿2019/05/16 09:06

編集2019/05/21 01:16

スプレッドシートのデータをslackの指定チャンネルに投稿するスクリプトなのですが、
どうも遅いです。
早くできる箇所があればお教えください。

【概要】
Googleフォームからの回答結果がリンク先のスプレッドシートに集約されます。
1時間に60回答程です。
データ項目数が多い為、データを分けてimportrangeで複数の別ファイルに読み込ませています。

集計結果や投稿内容そのもの等、結果を文字列結合させたセル内容をslackの指定チャンネルに投稿させています。

スクリプトを埋め込んでいる(バインドさせている)ファイルには、queryやimportrange等を多用していますので、
そもそもこの時点で処理に時間が掛かっていることは承知しております。

処理は指定シートで行っており、目視ではデータは表示されているのですが、
処理が遅く、かつ回答も随時増える為、処理が遅延してしまっています。

出来れば投稿から数分以内にはslack投稿させたいです。

※ライブラリとしてSlackAppを使用しています。

function doPost() { var token = PropertiesService.getScriptProperties().getProperty('SLACK_ACCESS_TOKEN'); var app = SlackApp.create(token); var message; var bot_name = "slackのbot名称"; var bot_icon = "https://xxxx.png"; var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート名を指定しています。"); var columnIVals = sheet.getRange('I:I').getValues(); // I列の値を配列で取得 var ILastRow = columnIVals.filter(String).length; //空白を除き、配列の数を取得 Logger.log(ILastRow); for(var i = 1; i <= ILastRow; i++) { if(!sheet.getRange(i, 12).getValue()){ message = sheet.getRange(i, 11).getValue(); sheet.getRange(i, 12).setValue(true); Logger.log(message); var branch = sheet.getRange(i,8).getValue(); Logger.log(branch); if(branch=="A支店") { app.postMessage("#A支店チャンネル", message, { username: bot_name, icon_url: bot_icon, }) } else if(branch=="B支店") { app.postMessage("#B支店チャンネル", message, { username: bot_name, icon_url: bot_icon, }) } else if(branch=="C支店") { app.postMessage("#C支店チャンネル", message, { username: bot_name, icon_url: bot_icon, }) } else{ app.postMessage("#テスト用チャンネル", message, { username: bot_name, icon_url: bot_icon, }) } } } };

以上です。どうぞよろしくお願いいたします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

alphase

2019/05/16 09:20

コードのインデントをもう少し綺麗にしていただけないでしょうか?それぞれ閉じかっこがどこにあるのかちょっとわかりにくいです。
tak123

2019/05/20 05:57

すみません!インデントが反映されないので、削除依頼しております。
tak123

2019/05/20 06:14

自己流で申し訳ありませんが、インデントを反映してみました。 よろしくお願いいたします。
macaron_xxx

2019/05/21 00:24

あなたの自己流のインデント辞めたほうがいいですよ。 まったく意味がわからないインデントです。
tak123

2019/05/21 01:17

macaron_xxxさん、ありがとうございます。 直してみました。いかがでしょうか?
macaron_xxx

2019/05/21 01:30

多少マシになりましたけど…。 GASのスクリプトエディタを使っているのであれば、Shift+Tabで自動インデントしてくれるので、それを利用してください。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。