やったこと
・特定のシートを複数PDF化けること。
・別途JSONファイルを保存して、そこから個人情報を取得すること
・複数のPDFをメールに添付すること。
経緯:
今まで直書きしてたけど、.envfile
のように個人情報は分けたくなりました。
下記のようなJSONファイルを用意
{
"user_info": {
"mail_adress": [
"hoge@gmail.com",
"huge@gmail.com"
]
}
}
コードがこちら
//個人データを保存したJSONファイル。共有用ファイルから確認可能。
const file_id = "1Jo6Dx6QPU_baFnCUzXlFiFyjRpyS71Nq";
//送信内容を保存したスプレッドシートのID
const sheet_id = "1x6olwI_XZALOzayxh0vXlxKXqtzhEwT_b92c0QUW7zY";
function sendMail(){
const currentTime = new Date();
//ファイルIDを元にスプレッドシートを開く
// 実行ファイルを利用する場合は、SpreadsheetApp.getActiveSpreadsheet();, spreadsheet.getId();でも可。
const spreadsheet = SpreadsheetApp.openById(sheet_id);
const seetNameList = ["sample1", "sample2"];
const token = ScriptApp.getOAuthToken();
//PDFファイル配列を作成するためのmap処理
const pdfFiles = seetNameList.map(function(seet){
//seetNameListから取得したseet名を元にsheetを取得
const sheetName = spreadsheet.getSheetByName(seet);
const gid = sheetName.getSheetId();
//PDF生成するURLをfetchする。特定のスプレッドシートの特定のシートだけPDF化するため
const url = `https://docs.google.com/spreadsheets/d/${sheet_id}/export?gid=${gid}&format=pdf&portrait=false&size=A4&gridlines=false&fitw=true`;
const pdf = UrlFetchApp.fetch(url, {headers: {'Authorization': 'Bearer ' + token}}).getBlob().setName(`${currentTime}.pdf`);
return pdf
});
// Jsonファイルを元にデータを取得
var file = DriveApp.getFileById(file_id);
// objectとして取得。 中身は空
var blob = file.getBlob();
var data = blob.getDataAsString();
var jobj = JSON.parse(data);
//jsonファイルに保存した連絡先の取得
const contactLists = jobj.user_info.mail_adress;
for (let i = 0; i < contactLists.length; i++) {
var to = contactLists[i];
var subject = "メールのタイトルを入力";
var body ="メールの本文を入力";
GmailApp.sendEmail(to,
subject,
body,
{attachments: pdfFiles})
}
}
ファイル名に時間を利用していますが、表記に利用するならmoment ライブラリを利用するのがおすすめです。