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

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

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

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

Q&A

1回答

327閲覧

GASを使ってメールの下書きを自動作成

k0214

総合スコア0

Google Apps Script

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

0グッド

1クリップ

投稿2024/07/10 02:00

編集2024/07/10 02:37

実現したいこと

スプレッドシート上で、
A列はチェックボックス、B列はメールアドレス、C列は件名が入ってます。

A1のチェックボックスがtrueになった場合、b1のアドレス、c1の件名を引用するイメージです。
その際、B1のアドレスは自動でBCCに割りつくようにしたいです。

メールの内容は表を貼り付けするので、書式が保たれるようにしたいです。

列と行が逆でも可能です。(A1にチェックボックス、A2にアドレス、A3に件名)

発生している問題・分からないこと

アドレスがbccにならない。
メールの内容が書式なし設定になってしまう。

該当のソースコード

特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

問題点と同じです。

補足

特になし

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

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

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

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

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

codemaker

2024/07/10 11:30

該当のソースコードが特になし??? コードの作成依頼ですか?
k0214

2024/07/10 23:52

すみません。 全くの初心者なもので、ソースコードの意味さえわかっていませんでした… 作成依頼になります
YAmaGNZ

2024/07/11 00:06

>アドレスがbccにならない。 >メールの内容が書式なし設定になってしまう とあるのに何も実行していないのですか? どうやったらこうなったのですか?
k0214

2024/07/11 03:17

ネットで調べて、チャットGPT等も活用してやってみましたが、上手くいきませんでした…
YellowGreen

2024/07/11 03:55

> ネットで調べて、チャットGPT等も活用してやってみました... 皆さんがおっしゃっていますが、 やってみてアドレスがBCCにならず、書式がないときの function で始まるコードを(質問を編集して「該当のコード」の欄に)書いていただいて 何をどうやったのかを教えていただかないと 回答できないと思います。
codemaker

2024/07/12 11:38

実際には動作不良ということではなくて、 コードも書いてないのですか?
guest

回答1

0

ご質問の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}

イメージ説明

投稿2024/07/13 00:10

編集2024/07/14 23:14
YellowGreen

総合スコア774

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

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

YellowGreen

2024/07/13 00:48 編集

表の作成は単純な例をお示ししましたが、 シートからセル範囲を指定して値を配列に取得(const table = sheet.getRange(...).getValues())しておいて、 繰り返し処理で <tr>と</tr> <th>と</th> のHTMLを作成することになると思います Google検索でやり方をご覧になれると思います。
YellowGreen

2024/07/13 01:30

繰り返し処理のコードの例を付記しました
YellowGreen

2024/07/13 08:29

結局、いろいろな方法の例にしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.40%

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

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

質問する

関連した質問