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

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

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

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

Q&A

解決済

2回答

398閲覧

Googleフォームで回答した内容を指定したアドレスへ自動送信する方法

ankou

総合スコア15

Google Apps Script

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

1グッド

0クリップ

投稿2018/08/21 13:59

初心者です。
初めて投稿したします。

■やりたいこと
Googleフォームを使って回答
回答した内容はスプレッドシートに自動反映
Googleフォームの設問内容に共有したい人のアドレスを入力する欄あり。
フォームで入力したアドレス宛だけにフォームの回答内容を共有したいです。

■試してること
フォーム回答したら自動的にスプレッドに反映されるので、スプレッドのスクリプトエディタに設定しています。

■問題点
回答フォームで回答したらスプレッドに自動反映されるため、常に最終行に反映されたアドレス宛にメールが送られるように設定したいが、読み取れない状況です。
メールの宛先を
mailto = myValues[y][x];
としており、x.yそれぞれも定義していますが読み取ってくれません。
仮に
mailto = myValues[23][5];
のように数字を入力すると回答フォームで入力したアドレス宛にメールが送信されます。

常に最終行に記載されたアドレスを読み取り、メールを配信するためには
どのようにすればよろしいでしょうか?

■実際に作成したスクリプト

// フォーム送信されたら起動、最終行の内容をメールに記載して、送信する
function sendmail() {

// スプレッドシートの操作
var sh = SpreadsheetApp.getActiveSheet();
var rows = sh.getLastRow();
var cols = sh.getLastColumn();
var rg = sh.getDataRange();
var myValues = rg.getValues(); //指定した範囲の値を格納
Logger.log('rows='+rows+' cols='+cols);
var y = rows;
var x = 5;

// 件名、本文
var subject = '件名'
var body = '';

// メール送信先(管理者等)
var mail_admin アドレス';
var mail_cc = '';
var mail_reply = mail_admin;

Logger.log('rows='+rows+' cols='+cols);

// メール本文作成
for (var j = 1; j <= cols; j++ ) {
var clmn_name = rg.getCell(1, j).getValue(); // カラム名
var clmn_value = rg.getCell(rows, j).getValue(); // 入力値
body += ( '【' + clmn_name + '】' + '\n' + clmn_value + '\n\n' );
}

// メール宛先 mailto = myValues[y][x]; // メール送信 if ( mailto ) { MailApp.sendEmail(mailto, subject, body, {cc : mail_cc, replyTo : mail_reply}); }else{ MailApp.sendEmail(mail_admin, 'error spreadsheet none mailaddress', body); }

}
ーーーーーーーーーー

AymanCamill👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

getValuesをしたとき、配列は0番目から始まります。一方getLastRowやgetLastColumnをしたときは1から始まります。

端的に言って

javascript

1mailto = myValues[y-1][x];

だと思います(23にしたとき23行目の宛先に送られていますか?24行目の宛先ではないですか?)

投稿2018/08/21 17:59

papinianus

総合スコア12705

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

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

ankou

2018/08/22 00:29

ありがとうございます。 早速試したところうまく動きました。 また、おっしゃるように23にした時、24行目になります。 続けての質問で恐縮ですが、 回答フォームには複数のアドレスを入力することになっています。 なので、複数のアドレスに送信できるようにしたいと考えています。 x=5 のところを5だけでなく、6.7.8としたいのですがどのようにすればよろしいでしょうか。 x=5;x<cols;x++ で試してみましたが、6列目だけの取得になってしまいます。
guest

0

ありがとうございます。
早速試したところうまく動きました。

また、おっしゃるように23にした時、24行目になります。

続けての質問で恐縮ですが、
回答フォームには複数のアドレスを入力することになっています。
なので、複数のアドレスに送信できるようにしたいと考えています。

x=5 のところを5だけでなく、6.7.8としたいのですがどのようにすればよろしいでしょうか。

x=5;x<cols;x++
で試してみましたが、6列目だけの取得になってしまいます。

投稿2018/08/21 23:57

ankou

総合スコア15

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問