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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Google

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

Q&A

解決済

4回答

1600閲覧

GAS セルの内容メール送信 数字の小数点も表示されてしまう

pon244

総合スコア59

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Google

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

0グッド

0クリップ

投稿2020/01/31 08:20

イメージ説明

実際のエクセルでは、2D-1dayの場所も
1,007
969
ですが

メールを送信後、1000単位のコンマもなく、なおかつ小数点以上も表示されております。
1.一番上の行だけ色を黄色にする方法
2.数字に1000単位のコンマをつける方法
3.小数点を表示させない方法

上記3点を実施したいです。
下記のサイトなどを見てるのですが、うまく行かなくてよろしくお願いいたします、、、
https://caymezon.com/gas-number-format/

CODE

var to = [xx];
function SendSpike() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getSheetByName("xx");
var data = sh.getDataRange().getValues();

// 指定したセル範囲にフォーマットを適用

var body = "";
body += "xx\n\n"
body += "xx \n\n"
body += "<table border='1'>";
for (var i=0; i<= ss.getLastRow()-1 ; i++) {
body += "<tr bgcolor='white'>";
for (var j=0; j<=8; j++) {
body += "<td>"+data[i][j]+"</td>"
}
body += "</tr>";
}
body += "</table>";

MailApp.sendEmail({
to : to.join(",") ,
subject : "xx",
htmlBody : body
});
}

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

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

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

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

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

guest

回答4

0

ベストアンサー

スプレッドーシートを見てみないとわからいないので、推測ですが、、
セルには数値が入っているが、セルの形式がテキストになっているのかな?
Number()でNumber型に変換してみてはどうでしょう?

js

1for (var j=0; j<=3; j++) { 2 range = data[i][j]; 3 if(!isNaN(range)){ 4 //小数点以下を四捨五入してからカンマ区切りにする 5 range = String(Number(data[i][j]).toFixed()).replace( /(\d)(?=(\d\d\d)+(?!\d))/g, '$1,'); 6 7 }

デバックは使ってますかね?
エラーがでる箇所のrangeの値と型を見れば解決の糸口になりますよ。

投稿2020/02/02 08:17

junzi

総合スコア279

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

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

pon244

2020/02/02 08:57

初心者で何もわからず申し訳ないです、、、泣 実行したところこのエラーです。 Cannot read property "0" from undefined スプレッドシートは下記のような感じです。 A1:B5がテキスト(数値ではない)C1:D3が数字(Sumifで計算してる) でバックのデータを確認したらこんな感じです。 [1, ”文字", ”文字",1007.4800000000001, 2443.63, 1436.15, 1247.3899999999999, 2255.23] A B C D 1 あ  か  100 100 2 い き 100 100 3 う く 100 100
pon244

2020/02/02 09:02

1000単位のコンマはつくようになりましたが、 小数点が多くついてしまってる状況です
junzi

2020/02/02 09:09

コードも載せられますか?
pon244

2020/02/02 09:31

function SendSpike1() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sh = ss.getSheetByName("xx"); var data = sh.getDataRange().getValues(); // 指定したセル範囲にフォーマットを適用 var body = ""; body += "xx\n\n" body += "xx \n\n" body += "<table border='1'>"; for (var i=0; i<= ss.getLastRow()-1 ; i++) { if(i==0){ body += "<tr bgcolor='yellow'>"; }else{ body += "<tr bgcolor='white'>"; } for (var j=0; j<=6; j++) { range = data[i][j]; if(!isNaN(range)){ range = String(Number(data[i][j])).replace( /(\d)(?=(\d\d\d)+(?!\d))/g, '$1,'); } body += "<td>"+range+"</td>" } Logger.log(body); } }
junzi

2020/02/02 11:12

range = String(Number(data[i][j]).toFixed()).replace( /(\d)(?=(\d\d\d)+(?!\d))/g, '$1,'); .toFixed()が抜けています。 data[i][j]にセルのデータが入っています。 Number()で数値型に変換した値を .toFixed()で小数点以下を四捨五入し String()で文字列にし .replace()で3桁毎にカンマを入れています。
pon244

2020/02/02 12:26

ありがとうございます!! 動いたのですが、メールしたら、メールが6通送られてしまいます、、、 function SendSpike4() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sh = ss.getSheetByName("Sheet1"); var data = sh.getDataRange().getValues(); // 指定したセル範囲にフォーマットを適用 var body = ""; body += "xx\n\n" body += "xx \n\n" body += "<table border='1'>"; for (var i=0; i<= ss.getLastRow()-1 ; i++) { if(i==0){ body += "<tr bgcolor='yellow'>"; }else{ body += "<tr bgcolor='white'>"; } for (var j=0; j<=6; j++) { range = data[i][j]; if(!isNaN(range)){  range = String(Number(data[i][j]).toFixed()).replace( /(\d)(?=(\d\d\d)+(?!\d))/g, '$1,'); } body += "<td>"+range+"</td>" } MailApp.sendEmail({ to : to.join(",") , subject : "abcde", htmlBody : body }); } }
pon244

2020/02/02 12:32

For }のあれでした! 解決しました!!! 本当にありがとうございます!!!!
junzi

2020/02/02 14:25

データの内容が変わったり、想定外の値が入った時などにエラーが出たりすると思うので、どんな処理をしているか理解しておいてください。
guest

0

それでは値が数字以外の場合はそのままにするような処理ではどうでしょうか?

js

1for (var j=0; j<=8; j++) { 2 range = data[i][j]; 3 if(!isNaN(range)){ 4 //rangeが数値であれば小数点以下を四捨五入してからカンマ区切りにする 5 range = String(Math.floor(data[i][j])).replace( /(\d)(?=(\d\d\d)+(?!\d))/g, '$1,'); 6 } 7body += "<td>"+range+"</td>" 8}

isNaN()は数値ではない場合にtrueを返します。

投稿2020/02/01 16:12

junzi

総合スコア279

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

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

pon244

2020/02/02 03:20

何度もありがとうございます! 試して見たのですが、結果は変わらずでした。 スプレッドシートにはSumの形式で入ってます。 数値の場合変更するようにしてるので、そのセルが数値として読み込まれたないってことですかね? 試しに値貼り付けでセルに貼り直したりしましたが、結果同じでした泣
guest

0

js

1for (var j=0; j<=8; j++) { 2 if(i==0){ 3 range =data[i][j]; 4 }else{ 5 //小数点以下を四捨五入してからカンマ区切りにする 6 range = String(data[i][j].toFixed()).replace( /(\d)(?=(\d\d\d)+(?!\d))/g, '$1,'); 7 } 8body += "<td>"+range+"</td>" 9}

すみません、URL先は違いましたね。。
こんな感じで一応できますが四捨五入してるので注意が必要です。
切り捨てならMath.floor(data[i][j])などしてください。

投稿2020/01/31 19:16

junzi

総合スコア279

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

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

pon244

2020/02/01 03:20

なんどもほんとすいません! 何個かはできたんですが、 この数字の前にエクセルには下記みたいに数字の左側には数字でなく文字列が入ってます。 ですので、コードを試すと、TypeError: Cannot find function toFixed in objecがきてしまいます。 文字列の場合ではなく、数字の範囲だけを指定して書き換えて見たのですがうまくいかないです泣 A 1000 B 2000 C 3000 【コード】 function SendSpike() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sh = ss.getSheetByName(xx); var data = sh.getDataRange().getValues(); var data1=sh.getRange(4,2,5,5).getValues(); for (var j=0; j<=8; j++) { if(i==0){ range =data[i][j]; }else{ //小数点以下を四捨五入してからカンマ区切りにする range = String(data1.toFixed()).replace( /(\d)(?=(\d\d\d)+(?!\d))/g, '$1,'); } body += "<td>"+range+"</td>" } body += "<td>"+data[i][j]+"</td>" } body += "</tr>" body += "</table>"; MailApp.sendEmail({ to : to.join(",") , subject : "xx", htmlBody : body }); }
guest

0

GASはやったことないですがJavaScript的な感じですかね?

>1.一番上の行だけ色を黄色にする方法

if(i==0){ body += "<tr bgcolor='yellow'>"; }else{ body += "<tr bgcolor='white'>"; }

とかで一度目のループだけ背景を変える。

>2.数字に1000単位のコンマをつける方法
フォーマットすれば小数点も消える気がする
https://www.virment.com/google-apps-script-format/

>3.小数点を表示させない方法
小数点も四捨五入などハンドリングしたいならroundなどで丸める。
エクセルは数式になっていませんか?エクセルでは整数でも実は0.9999~みたいなこと(表現しない?)ありますよ。

投稿2020/01/31 14:10

junzi

総合スコア279

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

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

pon244

2020/01/31 15:56

色の変更はできました!!本当にありがとうございます! 数値がまだ苦戦してます、、、、 下記のように、再度場所を指定して、Formatを指定して見たのですが、 エラーが出ます、、Cannot find method setNumberFormats(string). (line 9, file "Code function SendSpike() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sh = ss.getSheetByName("xx"); var data = sh.getDataRange().getValues(); //数値のセルを指定してフォーマット化する var range = sh.getRange("D2:H6"); range.setNumberFormats('0.000');
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問