0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

スプレッドシートからメールを送る際にマークダウンっぽいのを使えるようにしたい

0
Posted at

毎日スプレッドシートで日報の内容を書いてそれを元に下書きを作成し送信しているのですが、
せっかくなら簡単なマークダウンを使えたら便利だなと思い作りました。

対応したマークダウンっぽいもの

### ->フォントサイズ3になりQuitaの#を使った時と同じような下線が入ります。
## ->フォントサイズ4で上記に同じです
# ->フォントサイズ3で上記に同じです

*hogehoge* -> イタリックになります。
**hogehoge** -> 太字になります
~~hogehoge~~ -> 取り消し線が引かれます。

実装

gas

function myFunction() {
  const values = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
  const to = values[1][1];
  const subject = values[2][1];
  let body = '';

  body = values[3][1]
  html = transformMarkdownToHtml(body)

  GmailApp.createDraft('mike@example.com', 'test',body,{htmlBody:html});
}

function transformMarkdownToHtml(body) {

  // 1行ごと取り出す
  htmllist = body.split(/\n/g)
  Logger.log(htmllist)

  var returnHtmlList = []
  for (var row of htmllist){

    //マークダウンのタグの処理
    tag = row.split(' ')[0]

    // #の処理
    if (tag==='###'){ //標準の大きさ
      row = '<font size=3 style="border-bottom: 1px solid #ddd; display: block; margin-bottom:0.2em;">'+row+'</font>'
    }
    else if (tag==='##'){ //中の大きさ
      row = '<font size=4 style="border-bottom: 1px solid #ddd; display: block; margin-bottom:0.2em;">'+row+'</font>'
    } 
    else if (tag==='#'){ //大の大きさ
      row = '<font size=5 style="border-bottom: 1px solid #ddd; display: block; margin-bottom:0.2em;">'+row+'</font>'
    }
    else if (row==='***'){//水平線
      row = '<hr>'
    }

    var flag = true
    //1行に複数のタグがあるかもなので、elseに流れるまでは繰り返します。
    while (flag){
      //イタリック
      if (row.search(/\*\*.*\*\*/) != -1){
        row = row.replace(/\*\*/,'<i>')
        row = row.replace(/\*\*/,'</i>')
      }
      //太字
      else if (row.search(/.\**\*./) != -1){
        row = row.replace(/\*/,'<b>')
        row = row.replace(/\*/,'</b>')
      }
      //打ち消し線
      else if (row.search(/.~~.*~~./) != -1){
        row = row.replace(/~~/,'<s>')
        row = row.replace(/~~/,'</s>')
      }
      else{
        row += '<br>'
        flag = false
      }
    }
    returnHtmlList.push(row)
  }

  // リストの結合
  strhtml = returnHtmlList.join(',').replace(/,/g,'');

  return strhtml
}

こんなかんじ

image.png

とりえあず使いそうなもの、使いたいものは実装しました。
イタリックや太字などのrow.searchの部分で正規表現に少し苦労しました。
もっといい感じにすることができたらコメント欄で教えてもらえたらうれしいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?