GASを使ってスプレッドシートから表を読み込み、HTML化してHTMLメールを送るスクリプトを書いています。
表示したい形式は、取得した値が実際にはドル表記であったり%だったり日付だったりとフォーマットがバラバラです。
値の表示は下部に示すソースの rangeValue[i][j] の部分でが、文字列は良いのですが数字が全て小数点が10個以上も出てしまいます。
表示するフォーマットを各値別に指定するにはどのように記載すればよいでしょうか?
GAS
1 htmlTable = htmlTable + "<td style = 'overflow-wrap:break-word; width:"+rangeColWidth[j]+"px; text-align:"+rangeHAlign[i][j]+"; vertical-align:"+rangeVAlign[i][j]+"; font-size:"+rangeFontSize[i][j]+"; color:"+rangeFontColor[i][j]+"; font-style:"+rangeFontStyle[i][j]+"; background-color:"+rangeBackgroundColor[i][j]+";'>"+rangeValue[i][j]+"</td>";
元のシートだと以下のように見えており↓
以下のスクリプトでメールで送ると以下のようになってしまいます。↓
124944cb89eaeb6603b8da9e2fd6982c.png)
理想形は以下のようなイメージです↓
ソースは以下です。
GoogleAppScript
1function dailyReport() { 2 //1. 現在のスプレッドシートを取得 3 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 4 //2. 現在のシートを取得 5 var sheet = spreadsheet.getActiveSheet(); 6 //3. 指定するセルの範囲(A1)を取得 7 8 //B1 9 startRow = 1 10 startColumn = 2 11 12 //G31 13 endRow = 31 14 endColumn = 6 15 16 //値の取得 17 var range = sheet.getRange(startRow,startColumn,endRow,endColumn); 18 var values = range.getValues(); 19 var htmlTable = makeTable(sheet,range); 20 sendMail(htmlTable); 21 22 //取得した配列化ら値の取り出し 23 // for(let i = 0; i<endRow; i++){ 24 // for(let j = 0; j<endColumn;j++){ 25 // Logger.log(values[i][j]) 26 // } 27 // } 28} 29 30function makeTable(sheet,range){ 31 var rangeHeight = range.getHeight(); 32 var rangeWidth = range.getWidth(); 33 var rangeValue = range.getValues(); 34 var rangeFontSize = range.getFontSizes(); 35 var rangeFontColor = range.getFontColors(); 36 var rangeFontStyle = range.getFontStyles(); 37 var rangeBackgroundColor = range.getBackgrounds(); 38 var rangeHAlign = range.getHorizontalAlignments(); 39 var rangeVAlign = range.getVerticalAlignments(); 40 41 var rangeFirstCol = range.getColumn(); //get first colmn of range in sheet 42 var rangeColWidth = []; //Array to hold the width of first row or range 43 44 //HTML Table 45 var htmlTable = "<table>"; 46 for(i = 0; i < rangeHeight; i++){ 47 htmlTable = htmlTable + "<tr>"; 48 for(j = 0; j < rangeWidth; j++){ 49 //get each column width to rangeColWidht[] 50 if(i == 0){ 51 rangeColWidth.push(sheet.getColumnWidth(rangeFirstCol+j)); 52 } 53 htmlTable = htmlTable + "<td style = 'overflow-wrap:break-word; width:"+rangeColWidth[j]+"px; text-align:"+rangeHAlign[i][j]+"; vertical-align:"+rangeVAlign[i][j]+"; font-size:"+rangeFontSize[i][j]+"; color:"+rangeFontColor[i][j]+"; font-style:"+rangeFontStyle[i][j]+"; background-color:"+rangeBackgroundColor[i][j]+";'>"+rangeValue[i][j]+"</td>"; 54 } 55 htmlTable = htmlTable + "</tr>"; 56 } 57 htmlTable = htmlTable + "</table>"; 58 59 return htmlTable; 60} 61 62function sendMail(htmlTable){ 63 // Get the email address of the active user - that's you. 64 var email = Session.getActiveUser().getEmail(); 65 66 // Get the name of the document to use as an email subject line. 67 var subject = 'test'; 68 69 var body ='write body here'; //ignored when htmlBody can be used in mailer 70 71 // document to use as an email body 72 var htmlBody = "" + htmlTable + ""; 73 74 // Send yourself an email with a link to the document. 75 GmailApp.sendEmail(email, subject, body, {htmlBody: htmlBody}); 76}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/13 10:10 編集