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

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

新規登録して質問してみよう
ただいま回答率
85.37%
Google Apps Script

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

Q&A

解決済

1回答

1341閲覧

Google Apps Script データ取得が途中で終了してしまう。

kumalice

総合スコア2

Google Apps Script

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

0グッド

1クリップ

投稿2021/08/25 04:32

編集2021/08/25 08:24

前提・実現したいこと

特定列の情報を基に情報を取得し、メールを送信したい。

発生している問題・エラーメッセージ

  • 情報の取得が最終行まで実施されない。

  →L147まであるのにL106で止まってしまいます。行の最初は44行目です。

  • ※追記

エラーメッセージが出ているわけではありません。「実行」すると「実行完了」が表示されます。

該当のソースコード

function mailAlerts() {
var bk = SpreadsheetApp.getActiveSpreadsheet();
var sh = bk.getActiveSheet();
var columnsVals = bk.getRange("L:L").getValues();
var last_row = columnsVals.filter(String).length +1 ;
var begin_row = 44; 

var today = new Date();  
var tgdata = new Date();
tgdata.setDate(today.getDate()+1);
var formatDate = Utilities.formatDate(today,"JST","yyyy/MM/dd");
tgdata=Utilities.formatDate(tgdata,"JST","yyyy/MM/dd");

for(var i = begin_row; i <= last_row; i++) {

var sell1 = "L"+i; Logger.log(sell1); var value1 = sh.getRange(sell1).getValue(); var value1 = Utilities.formatDate(value1,"JST","yyyy/MM/dd"); Logger.log(value1); //状況 var sell2 = "M"+i; var value2 = sh.getRange(sell2).getValue(); if(tgdata >= value1 && value2 == "継続中"){ //依頼支店 var sell3 = "C"+i; var value3 = sh.getRange(sell3).getValue(); //プロジェクト var sell5 = "E"+i; var value5 = sh.getRange(sell5).getValue(); //PJ Number var sell6 = "B"+i; var value6 = sh.getRange(sell6).getValue(); switch(true){ case tgdata == value1: var mes_subject = '【納期アラート】本日が納期予定前日です。: ' + value6 + value5; break case formatDate == value1: var mes_subject = '【納期アラート】納期予定日です。: ' + value6 + value5; break case formatDate > value1: var mes_subject = '【納期アラート】納期予定日を過ぎています。: ' + value6 + value5; break } Logger.log("mes_subject " + mes_subject); var mes = '■依頼支店 : ' + value3 + '\n■PJ number: '+ value6 + '\n■プロジェクト: '+ value5 + '\n■状  況: '+ value2 + '\n■納  期: '+ value1+ '\n■メッセージ' + '\n納期を確認してください。' + '\n※このメールは、機械的に納期予定日と本日を比較したアラートです。行き違いで納品済のときは、データを更新してください。' + GmailApp.sendEmail('メールアドレス',mes_subject ,mes); Logger.log("適用 "+value1+" "+value2+" "+value3+" "+value5+" "+value6); }

}
}

補足情報

非表示行も存在しますが、その情報は取得しています。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

情報の取得が最終行まで実施されない。
→L147まであるのにL106で止まってしまいます。行の最初は44行目です。

原因は

var last_row = columnsVals.filter(String).length +1 ;

でしょう。
変数last_rowに代入されている値は
空白データではない行数であって、最終行ではないからです。

非表示行も存在しますが、その情報は取得しています。

特定の行 44 から値が格納されている最終行までループしているのですから
行ごとに

  • 空白セル判定
  • 行の非表示判定

を実施すればいいのではないでしょうか。

GAS

1function checkRows() 2 let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 3 const COLNUM = 12; //L列 4 const begin_row = 44; 5 const last_row = sheet.getRange(sheet.getMaxRows(), COLNUM) 6 .getNextDataCell(SpreadsheetApp.Direction.UP).getRow(); 7 8 for (let i = begin_row; i <= last_row; i++) { 9 if (sheet.isRowHiddenByUser(i) || sheet.getRange(i, COLNUM).isBlank()) { 10 continue; 11 } 12 console.log(`処理対象の行番号は${i}です`) 13 } 14}

投稿2021/08/25 17:10

mayu-

総合スコア335

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kumalice

2021/08/26 03:36

mayu-様 コメントありがとうございます。 教えていただいた内容で解決しました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問