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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

1860閲覧

GASによるHTMLメール送信する際の値のフォーマット指定方法

rjberger19

総合スコア33

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2021/08/13 06:25

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}

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

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

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

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

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

guest

回答1

0

ベストアンサー

makeTables関数内の

var rangeValue = range.getValues();

var rangeValue = range.getDisplayValues();

に変えた場合どうでしょうか?

投稿2021/08/13 07:31

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

rjberger19

2021/08/13 10:10 編集

一部右寄り左よりなどがずれたりはしてしまっていますが、うまくいきました!! ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問