このコードは、Googleスプレッドシート上で特定の形式のデータを入力した場合に、Gmailの下書きを一括で作成する機能を実装したものです。
具体的には、スプレッドシート上の「下書き作成ツール」というシートに、送信先やタイトル・本文に必要な情報を入力すると、その内容を元にGmailの下書きを一括で作成します。メールアドレスはCCで設定することができ、複数のアドレスを設定することもできます。
以下、コードの詳細な解説です。
function onOpen()
スプレッドシートを開いたときに実行される処理を定義する関数です。この関数では、メニューバーに「下書き一括作成」という項目を追加する処理を行っています。
const spreadsheet = SpreadsheetApp.getActive();
アクティブなスプレッドシートを取得するためのコードです。
const menuItems = [{ name: '実行', functionName: 'createEmailDraft' }];
追加するメニュー項目の名前と、実行される関数を指定しています。この場合は「実行」という名前で、createEmailDraft()という関数を実行するようになっています。
spreadsheet.addMenu('下書き一括作成', menuItems);
addMenu()メソッドを使って、メニューバーに「下書き一括作成」を追加する処理を行っています。
function createEmailDraft()
Gmailの下書きを一括で作成するための関数です。この関数では、下書きを作成するために必要な情報を取得し、ループ処理を行ってGmailの下書きを一括で作成します。
const spreadsheet = SpreadsheetApp.getActive();
アクティブなスプレッドシートを取得するためのコードです。
spreadsheet.setActiveSheet(spreadsheet.getSheetByName("下書き作成ツール"));
「下書き作成ツール」という名前のシートをアクティブにしています。このシートには、Gmailの下書きを作成するために必要な情報が入力されています。
const sheet = SpreadsheetApp.getActiveSheet();
アクティブなシートを取得するためのコードです。
const CC = "[email protected]";
CC用のメールアドレスを指定するためのコードです。複数のメールアドレスを設定する場合は、カンマで区切って複数のメールアドレスを指定することができます。
const lastRow = sheet.getDataRange().getLastRow();
getDataRange()メソッドを使って、シートに入力されているデータの範囲を取得しています。getLastRow()メソッドを使って、データが入力されている最終行の行番号を取得しています。
for (let i = 6; i <= lastRow; i++) {
6行目から最終行までループ処理を行うためのコードです。letを使ってiを宣言しています。ループの終了条件はlastRowとして、最初の行を表す1から5行目はスキップしています。
try { ... } catch (e) { ... }
Gmailの下書きを一括で作成する処理を行うためのコードです。try-catch構文を使って、エラーが発生した場合にはログにエラーを出力し、その行の処理をスキップします。
const row = sheet.getRange(i, 1, 1, 6).getValues()[0];
ループで処理する行のデータを取得しています。getRange()メソッドを使って、行の範囲を取得しています。getValues()メソッドを使って、範囲内のセルの値を二次元配列として取得しています。その後、配列の0番目を取得することで、一次元配列としてデータを取得しています。
const month = row[0]; const companyName = row[1]; ...
取得したデータをそれぞれの変数に格納しています。配列のインデックス番号で、各セルの値を取得しています。
const subject = sheet.getRange(2, 3).getValue().replace('{月}', month);
メールの件名を作成するためのコードです。getRange()メソッドを使って、2行目の3列目のセルの値を取得しています。getValue()メソッドを使って、セルの値を取得しています。replace()メソッドを使って、テンプレート内の「{月}」を、取得したmonthの値に置換しています。
let jpdate; try { jpdate = Utilities.formatDate(date, 'JST', 'yyyy年MM月dd日'); } catch (e) { ... }
メールの本文に挿入する日付を、日本時間に変換するためのコードです。Utilities.formatDate()メソッドを使って、日付を日本時間に変換しています。変換が正常にできなかった場合は、ログにエラーを出力してその行の処理をスキップします。
const message = sheet.getRange(3, 3).getValue() .replace('{月}', month) ...
メールの本文を作成するためのコードです。
getRange()メソッドを使って、3行目の3列目のセルの値を取得しています。getValue()メソッドを使って、セルの値を取得しています。replace()メソッドを使って、テンプレート内の{月}、{会社名}、{部署名}、{お名前}、{date}を、それぞれ取得した値に置換しています。
GmailApp.createDraft(to, subject, message, { cc: CC });
Gmailの下書きを作成するためのコードです。createDraft()メソッドを使って、下書きを作成しています。toには、宛先のメールアドレスを、subjectには件名を、messageには本文を、{cc: CC}でCCのメールアドレスを指定しています。
SpreadsheetApp.getUi().alert("実行完了!\nメールボックスの「下書き」を確認してください。\nPDF添付も忘れずに!");
処理が完了したことを通知するためのコードです。ダイアログボックスを表示して、処理が完了したことをユーザーに通知しています。