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

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

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

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

Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

Google Apps Script

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

解決済

1回答

3090閲覧

<GAS>スプレッドシートでチェックした行の要素をまとめてGmail送信したい

ninniku

総合スコア0

Google スプレッドシート

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

Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

Google Apps Script

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2020/07/24 15:55

前提・実現したいこと

GAS初心者です。
スプレッドシートに入力されているデータを取得し、
Gmailを送信する、という動きを作っています。

具体的には、以下表のようなスプレッドシートの形で、
チェックボックスにチェックがついた行の要素を、
1つのメールにまとめて送りたいと思っています。

|番号|要素A|確認項目|メールアドレス|チェックボックス
|:--|:--:|--:|
|1|123|ok|○○@|レ|
|2|456|ok|○○@
|レ|

上記メールアドレスは同一前提です。
チェックボックスがついている行の要素をfilterメソッドで取り出すことろは書けたのですが、
1つのメールアドレスに複数要素をまとめて送信、というところを書くのに躓いています。
また、確認項目がokかつチェックがついていたらその行を送信、という形にしたいので、
現在のコードだと、メールが2つ送られてしまうようになってしまっています。
初歩的なご質問で申し訳ないのですが、ご教示いただけますと幸いです。

該当のソースコード

function myMail() { var sheet = SpreadsheetApp.getActiveSheet(); var lastRow = sheet.getLastRow(); var value = sheet.getDataRange().getValues(); var data = sheet.getRange(2,1,lastRow-1,4).getValues(); var num = data.filter(function(e){return e[3] === true}).map(function(e){return e[0]});//チェックが入った番号 var a = data.filter(function(e){return e[3] === true}).map(function(e){return e[1]});//チェックが入った要素A var address = data.filter(function(e){return e[3] === true}).map(function(e){return e[2]});//チェックが入ったメールアドレス    for(var i = 2; i <= lastRow; i++) if(sheet.getRange(i, 3).getValue() == "ok" && sheet.getRange(i, 4).getValue() === true){   var mailCc = 'xxxxx@xxx' var title = 'xxx' var html = ''; html += '番号'+num+' '+a+'<br><br>'; GmailApp.sendEmail(address,title,'本メールはhtmlメールです',{htmlBody:htmlbody}); }}

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

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

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

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

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

guest

回答1

0

自己解決

重複するデータを一次元配列化し、indexOfメソッドを使い、配列の重複を省くことで対応できました。

投稿2020/07/26 13:20

ninniku

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問