Instantly share code, notes, and snippets.

@msng /gist:2468439
Last active Oct 3, 2015

Embed
What would you like to do?
Google ドキュメントのフォームから投稿があったら確認メールを自動返信する(日本語版)
/**
* Google ドキュメントのフォームから投稿があったら確認メールを自動返信する(日本語版)
* English version will be available later.
*
* @author Masunaga Ray ( http://www.msng.info/ )
* @instruction http://www.msng.info/archives/2012/04/google-docs-auto-reply.php
*/
function sendConfirmation() {
try {
var ss = SpreadsheetApp.getActiveSpreadsheet();
//フォームでメールアドレスが入力される列の名前
var emailColName = "メールアドレス";
//テンプレートとして使うシートの番号。1枚目を0と数える。false にするとテンプレートを使わない。
var templateSheetId = false;
//テンプレートを使わない場合の確認メールの送信内容
//件名(デフォルトではフォームのタイトルが入ります)
var subject = ss.getName();
//冒頭に入れる文章
var bodyPre = "下記の内容で受け付けました。\n\n";
//末尾に入れる文章
var bodyPost = '';
//投稿内容の箇条書きにつける印
var bullet = ' - ';
//確認メールのコピーを送る管理者のメールアドレス
var adminEmail = ss.getOwner().getEmail();
//エラー発生時に管理者に送るメールの件名
var errorSubject = 'エラーが発生しました';
//スプレッドシートにつける送信済みマーク
var sentFlag = 'v';
//送信済みマークをつける列のタイトルと背景色
var sentHeaderTitle = '送信済み';
var sentHeaderBgColor = '#ffffff';
//メールアドレスの列が見つからなかった場合のエラーメッセージ
var emailNotFoundMessage = 'メールアドレス用のフィールド名「' + emailColName + '」が見つかりませんでした';
var sheets = ss.getSheets();
if (templateSheetId != false) {
//必要に応じてテンプレートの配置セルを変更してください
var template = sheets[templateSheetId].getRange(1, 1, 4, 1).getValues();
subject = (template[0][0] == '') ? subject : template[0][0];
bodyPre = template[1][0];
bodyPost = template[2][0];
errorSubject = template[3][0];
}
var dataSheet = sheets[0];
var range = dataSheet.getDataRange();
var lastRow = range.getLastRow();
var lastCol = range.getLastColumn();
var header = dataSheet.getRange(1, 1, 1, lastCol).getValues();
var emailCol = header[0].indexOf(emailColName) + 1;
if (emailCol == 0) {
throw emailNotFoundMessage;
}
var sentHeader = range.getCell(1, lastCol);
if (sentHeader.getValue() != sentHeaderTitle || sentHeader.getBackground() != sentHeaderBgColor) {
lastCol++;
range = dataSheet.getRange(1, 1, lastRow, lastCol);
range.getCell(1, lastCol).setValue(sentHeaderTitle).setBackground(sentHeaderBgColor).setHorizontalAlignment('center');
}
for (var row = lastRow; row > 1; row--) {
if (range.getCell(row, 1).getValue()) {
var sentFlagCell = range.getCell(row, lastCol);
if (sentFlagCell.getValue() != sentFlag) {
var email = range.getCell(row, emailCol).getValue();
var body = '';
for (var col = 2; col < lastCol; col++) {
var title = range.getCell(1, col).getValue();
if (title == '') {
break;
}
body += bullet + range.getCell(1, col).getValue() + ': ' + range.getCell(row, col).getValue() + "\n";
}
body = bodyPre + body + bodyPost;
MailApp.sendEmail(email, subject, body, {bcc:adminEmail});
sentFlagCell.setValue(sentFlag).setHorizontalAlignment('center');
} else {
break;
}
}
}
} catch(e) {
MailApp.sendEmail(adminEmail, errorSubject, e);
}
}
@msng

This comment has been minimized.

Show comment
Hide comment
@msng

msng Mar 30, 2013

Google Apps Script の仕様変更に伴って、コードを一部修正

Owner

msng commented Mar 30, 2013

Google Apps Script の仕様変更に伴って、コードを一部修正

@osakin

This comment has been minimized.

Show comment
Hide comment
@osakin

osakin Jul 19, 2015

76行目の意図を教えてください
if (range.getCell(row, 1).getValue()) {
}

osakin commented Jul 19, 2015

76行目の意図を教えてください
if (range.getCell(row, 1).getValue()) {
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment