食品の期限を管理するために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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
家の中でのこだわりスペースはどこですか?
自分の家で快適に過ごすために工夫しているスペースはありますか? 例)ベランダでお茶を飲むためのカフェテーブル ゲーミングに特化したこだわりのPCスペース
-
家・車以外で、人生で一番奮発した買い物
どんなものにお金をかけるかは人それぞれの価値観ですが、 誰もが一度は清水の舞台から飛び降りる覚悟で、ちょっと贅沢な買い物をしたことがあるはず。
-
ホテルを選ぶとき、これだけは譲れない条件TOP3は?
ホテルを探す時、予約サイトで希望条件の絞り込みができる便利な世の中。 あなたは宿泊先を決めるとき「これだけは譲れない」と思う条件TOP3を教えてください。
-
牛、豚、鶏、どれか一つ食べられなくなるとしたら?
牛肉、豚肉、鶏肉のうち、どれか一種類をこの先一生食べられなくなるとしたらどれを我慢しますか?
-
好きな和訳タイトルを教えてください
洋書・洋画の素敵な和訳タイトルをたくさん知りたいです!【例】 『Wuthering Heights』→『嵐が丘』
-
先日ウェブデザイン技能検定三級を受けたのですが、公式の解答では答えが②となっているのですがその理由が
HTML・CSS
-
プログラマーは誘惑にさらされる人生?
その他(プログラミング・Web制作)
-
近年誕生したプログラミング言語
その他(プログラミング・Web制作)
-
-
4
至急助けてください!!!あと2時間しかないです! ボタンを押したら0ランプが点灯し、コンマ5秒後に1
その他(プログラミング・Web制作)
-
5
プログラミングの課題がわからないので教えていただきたいです。特にサークル関数を定義した後に呼び出す方
C言語・C++・C#
-
6
Pythonのコードエラーについてです。
その他(プログラミング・Web制作)
-
7
次の日本語の意味を教えて下さい
C言語・C++・C#
-
8
プログラミング 学習
JavaScript
-
9
文系のSE志望です。プログラミングを今から習得したいのですが、初めて学ぶのにオススメの言語があれば教
その他(プログラミング・Web制作)
-
10
マイクロソフトがvbを捨てたのは何故ですか C#は変数の型指定ひとつとっても最近の主流とはかけ離れて
その他(プログラミング・Web制作)
-
11
これて逆じゃないですか?
C言語・C++・C#
-
12
サブフォルダに格納されているファイルを、ファイル名ごとに条件分岐させたい
Visual Basic(VBA)
-
13
excelをhtmlに変換した途端、一部フォントが変わるのはなぜでしょうか。
HTML・CSS
-
14
エディターで以下のような色になるエディターは解りますか?
その他(プログラミング・Web制作)
-
15
HLMT、CSSについて相談です。 私は今までずっと自身のサイトで以下のような総称ファミリーを使って
その他(プログラミング・Web制作)
-
16
今ってプログラミング言語は何が中心?
C言語・C++・C#
-
17
ホログラムを作ってくれる会社はありませんか
その他(プログラミング・Web制作)
-
18
プログラマーに向いている人の特徴や性格は何がありますか?
その他(プログラミング・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歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
シンプルなweb版スタンプラリー...
-
google apps scriptの終了のさせ方
-
パス付きサイトのjavascript解析
-
C# 演算 奇数と偶数 表現の仕方
-
【javascript】正規表現で括弧...
-
ウィンドウリサイズ、ツールバ...
-
GASでundefinedエラーが出ます
-
ASP.NETのコントロールの値をJa...
-
ASP.NET MVCでObjectをjsに渡す
-
html javascript リンク先アド...
-
商品コードを入力で、商品名、...
-
リンク集をCSVファイルで管理し...
-
タイピングゲームの異なるロー...
-
翌月を取得するGASが分かりません
-
フォルダ名をフォルダ内のテキ...
-
アクセス時からのカウントダウ...
-
このプログラムに、王手をかけ...
-
スクロールさせると一緒につい...
-
ジェネレーターの作り方
-
C#OpenCv V4にのエラーに関する...
マンスリーランキングこのカテゴリの人気マンスリー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を組み込む
おすすめ情報