ご質問のBCCと表のメール送信のコードの例を参考まで。
JavaScript
1function createMailDraft() {
2 // 初期設定
3 const sheetName = 'シート1'; // アドレス、件名等のシート
4 const firstColumn = 'A'; // データの開始列
5 const lastColumn = 'D'; // データの終了列
6 const firstRow = 2; // データの開始行(1行目は見出し)
7 const recipient = 'xxxxxxxxxx@xxxxx.com'; // メールの送信先
8 const tableSheetName = 'シート2'; // 送信する表のシート
9 const tableRange = 'A1:F30'; // 表のセル範囲
10
11 const ss = SpreadsheetApp.getActiveSpreadsheet();
12 const sheet = ss.getSheetByName(sheetName);
13 const tableSheet = ss.getSheetByName(tableSheetName);
14 const values = sheet
15 .getRange(firstColumn + firstRow + ':' + lastColumn + sheet.getLastRow())
16 .getValues();
17 // メールに添付する表の要素の例(実際は、シートから配列として取得?)
18 const range = tableSheet.getRange(tableRange);
19 const table = range.getDisplayValues();
20 const tableImage = makeTableImage(table);
21 const tablePDF = makePDF(range);
22
23 values.forEach(v => {
24 const [check, address, subject] = v;
25 const body = makePlainBody(table);
26 const html = makeHtmlBody(table);
27 // ---- ここからがBCCでの送信の例
28 if (check) {
29 const options = {
30 bcc: address,
31 htmlBody: html,
32 attachments: [tableImage, tablePDF],
33 };
34 // GmailApp.sendEmail(recipient, subject, body, options);
35 GmailApp.createDraft(recipient, subject, body, options);
36 }
37 // ---- BCCでの送信の例ここまで
38 });
39}
40
41// 表のPDFファイル作成の例
42function makePDF(range) {
43 const pdfRange = range.getA1Notation().replace(':', '%3A');
44 const sheet = range.getSheet();
45 const sheetId = sheet.getSheetId();
46 const ssId = sheet.getParent().getId();
47 const pdfOptions = {
48 exportFormat: 'pdf',
49 format: 'pdf',
50 size: 'A4', // 出力サイズ
51 portrait: 'true', // PDFの向き true:縦 false:横
52 fitw: 'true', // ページフィット true:フィット false:原寸大
53 scale: '2', // スケール 1:標準100% 2:幅に合わせる 3:高さに合わせる 4:ページに合わせる
54 top_margin: '0.100', // 上余白(単位:cm)
55 bottom_margin: '0.100', // 下余白
56 left_margin: '0.100', // 左余白
57 right_margin: '0.100', // 右余白
58 sheetnames: 'false', // シート名 true:有 false:無
59 printtitle: 'false', // タイトル true:有 false:無
60 pagenum: 'RIGHT', // ページ番号位置
61 gridlines: 'false', // グリッドライン true:有 false:無
62 fzr: 'true', // 行見出し true:含める false:含めない
63 fzc: 'true', // 列見出し true:含める false:含めない
64 range: pdfRange, // 選択範囲(A1形式で':'を’%3A'で置換してある)
65 gid: sheetId // シートID
66 };
67 //各出力オプションを'&'で接続してURL用のオプション文字列を作成
68 const options = Object.entries(pdfOptions).map(v => v[0] + '=' + v[1]).join('&');
69 //PDFファイルを作成
70 const pdfUrl = 'https://docs.google.com/spreadsheets/d/' + ssId + '/export?' + options;
71 const authParams = { headers: { Authorization: 'Bearer ' + ScriptApp.getOAuthToken() }, muteHttpExceptions: true };
72 const pdf = UrlFetchApp.fetch(pdfUrl, authParams).getBlob();
73
74 return pdf;
75}
76
77// 表の添付ファイル作成の例
78function makeTableImage(table) {
79 const tbl = table.slice();
80 const titles = tbl.shift();
81 const dataTable = Charts.newDataTable();
82 titles.forEach(v => dataTable.addColumn(Charts.ColumnType.STRING, v));
83 tbl.forEach(v => dataTable.addRow(v));
84 const tableImage = Charts.newTableChart()
85 .setDataTable(dataTable.build())
86 .setDimensions(table[0].length * 100, (table.length) * 21)
87 .build()
88 .getBlob();
89
90 return tableImage;
91}
92
93
94// テキスト形式のメール本文作成の例
95function makePlainBody(table) {
96 let body = '表の例です\r\n';
97 table.forEach(tr => {
98 tr.forEach(th => {
99 body += '|';
100 body += th;
101 })
102 body += '|\r\n';
103 })
104
105 return body;
106}
107
108// HTML形式のメール本文作成の例
109function makeHtmlBody(table) {
110 // 表に関する説明がないので単純なサンプル
111 let html = '<body>';
112 html += '<p>表の例です</p>';
113 html += '<table border = "2" style="border-collapse: collapse">';
114 table.forEach(tr => {
115 html += '<tr>';
116 tr.forEach(th => {
117 html += '<th>';
118 html += th;
119 html += '</th>';
120 });
121 html += '</tr>';
122 });
123 html += '</table>';
124 html += '</body>';
125
126 return html;
127}
