毎日スプレッドシートで日報の内容を書いてそれを元に下書きを作成し送信しているのですが、
せっかくなら簡単なマークダウンを使えたら便利だなと思い作りました。
対応したマークダウンっぽいもの
### ->フォントサイズ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
}
こんなかんじ
とりえあず使いそうなもの、使いたいものは実装しました。
イタリックや太字などのrow.searchの部分で正規表現に少し苦労しました。
もっといい感じにすることができたらコメント欄で教えてもらえたらうれしいです。
