食品の期限を管理するためにGASを利用しようとコードを参考にしたのですがうまく動作してくれないためお力をお貸し頂ければたらと思い投稿しました。
↓以下↓
function mailSend() {
var mySs = SpreadsheetApp.getActiveSpreadsheet(); //スプレッドシートを取得
var Sheet = mySs.getSheetByName('食材管理'); // シート名を取得
var today = new Date(); //今日の日付を取得
var strTo = "〇〇@gmail.com"; //To
var strSender = "××"; //差出人名
var strFrom = "△△@gmail.com"; //From
/* 繰り返し計算 */
for (var i = 2; i <= 200; i++) {
var to_do = Sheet.getRange(i, 3).getValue(); //B列 何を買った?を取得
var status = Sheet.getRange(i, 4).getValue(); //C列「個数」を取得
var limit = Sheet.getRange(i, 5).getValue(); //D列「期限」を取得
var date_limit = new Date(limit); //G列「期限」のDateを作成
var dt = date_limit.getTime() - today.getTime(); //date_limitから今日の日付を引く
var day = Math.ceil(dt / 1000 / 60 / 60 / 24);
//日付に変換
}
if (status == "完了") /* ステータスが完了なら何もしない */;
else if (5 <= day && day <= 7) { //締め切りの7日~5日前
/* メール本文を準備 */
var strSubject1 = to_do + "の期限まで" + day + "日です";
var strBody1 = to_do + "の消費に取り掛かりましょう。\n" /* 改行 */
+ "期限まであと" + day + "日です。\n" /* 改行 */
+ "\n" /* 改行 */
+"期限:" + date_limit;
/* メールを送信 */
var send = GmailApp.sendEmail(
strTo,
strSubject1,
strBody1, {
from: strFrom,
name: strSender
}
);
}
else if (1 <= day && day <= 4) { //締め切りの1~4日前
/* メール本文を準備 */
var strSubject2 = to_do + "の期限まであと" + day + "日です!";
var strBody2 = to_do + "の消費は順調ですか?\n" /* 改行 */
+ "期限まであと" + day + "日です。\n" /* 改行 */
+ "\n" /* 改行 */
+"期限:" + date_limit;
/* メールを送信 */
var send = GmailApp.sendEmail(
strTo,
strSubject2,
strBody2, {
from: strFrom,
name: strSender
}
);
}
else if (day <= 0) { //締め切り日
/* メール本文を準備 */
var strSubject3 = to_do + "の締切日を過ぎています。";
var strBody3 = to_do + "は締切日を過ぎています。廃棄は完了しましたか?\n" /* 改行 */
+"期限:" + date_limit;
/* メールを送信 */
var send = GmailApp.sendEmail(
strTo,
strSubject3,
strBody3, {
from: strFrom,
name: strSender
}
);
}
}
以上になります。よろしくお願いいたします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
> var to_do = ... //B列 何を買った?を取得
何も買っていない場合の判定が必要です。
> var status = ... //C列「個数」を取得
> if (status == "完了")
個数が "完了" とは何でしょうか?
このあたりの画面設計から見直すべきでしょう。
> for (var i = 2; i <= 200; i++) {
for 文で 199 行分の繰り返しをしていますが、
期限判定とメール送信処理は 1 行分の 1 回しか行っていません。
以下のいずれかへ設計を見直しましょう
* 1 行分のメールを 199 回送信
* 199 行分のメール本文を編集して 1 回送信 ← おすすめ
* 199 行から告知すべき 1 行分を探して 1 回送信
No.2
- 回答日時:
No1です。
スプレッドシートは使っていないのですけれど・・
例えば、添付図のような表があるとして、本日(=8/12)より7日後以前に期限がくるものを抽出したいとします。
図ではG2セルに
=SORT(FILTER(C2:E20,E2:E20<today()+8,E2:E20<>""),3,1)
の式を入力してあります。
この結果、G2セル以降に、該当する行が期限の早い順に並べて抽出されます。
質問者様がお求めの内容に近い結果になってはいないでしょうか?
※ 単純な関数計算なので、C:E列の入力を増減すれば自動反映されますし、閲覧日(=today())に応じて自動更新もされます。
ご参考までに。
No.1
- 回答日時:
こんにちは
スプレッドシートもGASもほとんど知らないでの回答ですので、以下はあくまでもご参考までに・・・
>うまく動作してくれません
この表現だけだと、あまりにも漠としていて「何が上手く行かないのか」わかりません。
以下を、順にチェックしてみてください。
◇ 実行のトリガー
ご提示は関数定義のみですが、関数を設定してもどうやって実行しているのかが不明です。
自動実行の設定をしているのか、手動で実行しているのか・・
いずれにしろ、定義をするだけでは実行されることはありません。
まずは、実行できているのかをご確認ください。
(その際に、エラーが出るかどうかも。エラーが出ていれば、そのメッセージ内容が重要なヒントになります。)
◇ 計算部分
>SpreadsheetApp.getActiveSpreadsheet()
でシートを取得していますが、手動でスクリプトを実行するという事でしょうか?
自動実行でご提示の処理だけを実行するような場合には、getActiveSpreadsheet()は機能しないであろうと推測します。
シートの仕様を存じませんが、特に日付に関しては表示値と実際の値が異なっている可能性があります。
>getValue()
で取得した値がどのようになっているかを確認なさってみてください。
またその値を
>new Date(取得値)
で、正しく日付オブジェクトに変換できているのかも確認してみてください。
※ シートの日付欄が空欄(や日付以外の値)である可能性はありませんか?
空欄の場合でも正しく計算できるのかのチェックが必要と思います。
万一、日付以外の値があっても、エラーにならない制御も必要と思います。
※ 処理対象を数件にして、計算部分だけを実行し、結果をセルに出力するなり
alert表示などさせてみれば、計算部分のチェックは可能だと思います。
◇ メール送信部分
こちらの仕様も存じませんけれど、ドキュメントを見ると、オプションのfrom等には制限があるようです。
https://developers.google.com/apps-script/refere …
正しい指定になっているかをご確認ください。
※ オプション指定なしで試してみて送信できるのなら、そのあたりが怪しいということになるでしょう。
◇ 全体として
ご提示の処理が実行できたとして、毎回該当行数分のメールが送信されてくることになりそうですが、煩雑ではないのでしょうか?
また、シートの日付が空欄の場合のチェックも行ってはいないようですが、空欄分が全て送信されるてしまうようなことはありませんか?
雰囲気として、シートを開いたうえでスクリプトを実行するというお考えのように推測しますが、シートを開くのであれば、スクリプトを使わずとも関数等を設定しておくことで同様の計算は簡単にできるはずです。
更に、条件付き書式などを利用することで、色付け等の強調表示により視認しやすくもできると思います。
数が多くて一覧しにくいと言うのであれば、別シート(同一シートでも可)に該当するものだけを抽出して表示するような仕組みにしておけば、更に視認性は上がると思いますけれど・・・
(なぜスクリプトを使うのかがよくわかりません)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- その他(プログラミング・Web制作) google formsを使ったタスク依頼フォーム作成におけるご相談 1 2023/06/22 15:55
- JavaScript メールフォームの日付入力フォームで過去の日付で範囲指定する方法が分かりません 3 2024/04/05 17:43
- JavaScript GASでGoogleフォームの自動返信システムを作成しようとしたけれど保存ができません。 2 2023/12/26 18:19
- JavaScript HTMLで作った時報アプリが動きません 1 2024/01/21 09:49
- JavaScript javascriptでテーブルに追加した項目のid追加してローカルストレージを操作したい 5 2023/01/01 15:52
- JavaScript このプログラムに、王手をかけた時に、「王手!」と表示できるようなプログラムを簡単で良いので教えてくだ 1 2024/08/09 16:29
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- JavaScript javaScriptのコードの修正をお願いします。 1 2024/05/16 12:38
このQ&Aを見た人はこんなQ&Aも見ています
-
好きなおでんの具材ドラフト会議しましょう
肌寒くなってきて、温かい食べ物がおいしい季節になってきましたね。 みなさんはおでんの具材でひとつ選ぶなら何にしますか? 1番好きなおでんの具材を教えてください。
-
大人になっても苦手な食べ物、ありますか?
大人になっても、我慢してもどうしても食べれないほど苦手なものってありますよね。 あなたにとっての今でもどうしても苦手なものはなんですか?
-
「これはヤバかったな」という遅刻エピソード
寝坊だったり、不測の事態だったり、いずれにしても遅刻の思い出はいつ思い出しても冷や汗をかいてしまいますよね。
-
自分のセンスや笑いの好みに影響を受けた作品を教えて
子どもの頃に読んだ漫画などが その後の笑いの好みや自分自身のユーモアのセンスに影響することがあると思いますが、 「この作品に影響受けてるな~!」というものがあれば教えてください。
-
好きな「お肉」は?
牛肉、豚肉、鶏肉、ラム肉、クマやシカの狩猟肉……。 いろ〜んな肉が食べられるようになりましたよね。 あなたがこれまで食べて「これはうまい!」とか「なんじゃこりゃ!」と好きになったお肉を教えてください。
-
先日ウェブデザイン技能検定三級を受けたのですが、公式の解答では答えが②となっているのですがその理由が
HTML・CSS
-
プログラマーは誘惑にさらされる人生?
その他(プログラミング・Web制作)
-
近年誕生したプログラミング言語
その他(プログラミング・Web制作)
-
-
4
至急助けてください!!!あと2時間しかないです! ボタンを押したら0ランプが点灯し、コンマ5秒後に1
その他(プログラミング・Web制作)
-
5
プログラミングの課題がわからないので教えていただきたいです。特にサークル関数を定義した後に呼び出す方
C言語・C++・C#
-
6
次の日本語の意味を教えて下さい
C言語・C++・C#
-
7
文系のSE志望です。プログラミングを今から習得したいのですが、初めて学ぶのにオススメの言語があれば教
その他(プログラミング・Web制作)
-
8
プログラミング 学習
JavaScript
-
9
excelをhtmlに変換した途端、一部フォントが変わるのはなぜでしょうか。
HTML・CSS
-
10
今ってプログラミング言語は何が中心?
C言語・C++・C#
-
11
ホログラムを作ってくれる会社はありませんか
その他(プログラミング・Web制作)
-
12
プログラマーに向いている人の特徴や性格は何がありますか?
その他(プログラミング・Web制作)
-
13
Pythonのコードエラーについてです。
その他(プログラミング・Web制作)
-
14
これて逆じゃないですか?
C言語・C++・C#
-
15
マイクロソフトがvbを捨てたのは何故ですか C#は変数の型指定ひとつとっても最近の主流とはかけ離れて
その他(プログラミング・Web制作)
-
16
エディターで以下のような色になるエディターは解りますか?
その他(プログラミング・Web制作)
-
17
サブフォルダに格納されているファイルを、ファイル名ごとに条件分岐させたい
Visual Basic(VBA)
-
18
HLMT、CSSについて相談です。 私は今までずっと自身のサイトで以下のような総称ファミリーを使って
その他(プログラミング・Web制作)
-
19
2つほどお聞きしたいことがあり、答えてもらえると助かります。 1つ目は、チャットGPTにあらかじめ、
C言語・C++・C#
-
20
c++の勉強方法を教えてくださいプログラミングをやった事がなく1から勉強を始めようと思います1日1時
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・ハマっている「お菓子」を教えて!
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
なぜmatchメソッドがエラーにな...
-
C#OpenCv V4にのエラーに関する...
-
C#で、ContextMenuStripに動的...
-
Javascriptで、以下の様な足し...
-
カンマで終わってるのはセミコ...
-
setTimeoutによる繰り返しが途...
-
変数と文字列からオブジェクト...
-
最近Javascriptの勉強を始めた...
-
JavaScriptで決まった「時刻」...
-
javascriptでテーブルに追加し...
-
VSCODE[Python]の設定について
-
シンプルなweb版スタンプラリー...
-
javascriptでiframeのURL変更は?
-
javascriptのプログラムについ...
-
翌月を取得するGASが分かりません
-
HTMLにWSHを組み込む
-
ASP.NETのコントロールの値をJa...
-
GASでundefinedエラーが出ます
-
google apps scriptの終了のさせ方
-
現在と指定の日付の年数差を効...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
google apps scriptの終了のさせ方
-
C#OpenCv V4にのエラーに関する...
-
ジェネレーターの作り方
-
GASでundefinedエラーが出ます
-
ASP.NETのコントロールの値をJa...
-
C#で、ContextMenuStripに動的...
-
翌月を取得するGASが分かりません
-
gas スプレッドシートがアクテ...
-
ASP.NET MVCでObjectをjsに渡す
-
シンプルなweb版スタンプラリー...
-
ローカルにあるファイルを検索...
-
なぜmatchメソッドがエラーにな...
-
VSCODE[Python]の設定について
-
1日1回だけ引けるjavascriptお...
-
javascriptでiframeのURL変更は?
-
html javascript リンク先アド...
-
googleスプレッドシートのApps ...
-
lengthが読めない理由が分からない
-
【javascript】正規表現で括弧...
-
HTMLにWSHを組み込む
おすすめ情報