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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

Q&A

解決済

2回答

497閲覧

GAS SLACKAPI タイムスタンプについて

Stupid

総合スコア21

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

0グッド

0クリップ

投稿2022/08/23 22:55

編集2022/08/24 02:44

前提

GASを使用して取得したJSONファイルをparseし、情報をスプレッドシートに転記したいと思っています。
GASについても初心者のため基礎的な質問かもしれませんが何卒よろしくお願いいたします。

実現したいこと

発生している問題・エラーメッセージ

params.event.tsを指定したときに、小数点以下6桁まで出力させたい。
(現状5桁目でしか出力されない。)
(params.eventを指定したときはちゃんと小数点以下6桁まで出力されている。)

該当のソースコード

GAS

1function doPost(e){ 2 var params = JSON.parse(e.postData.getDataAsString()); 3 main(params); 4} 5 6function main(params){ 7 8 var spreadsheet = SpreadsheetApp.openById('XXXXXXXXXXXXXXXX'); 9 var sheet = spreadsheet.getSheetByName('XXXX'); 10 11 //parseしたデータからeventを指定 12 sheet.getRange(66,29).setValue(params.event); 13 //parseしたデータからevent.tsを指定 14 sheet.getRange(66,30).setValue(params.event.ts); 15以下省略 16}

試したこと

sheet.getRange(66,30).setValue(params.event.ts);を以下に修正しテスト実行したところ、6桁目が出力宇される形でできました。
sheet.getRange(66,30).setValue(params.event.ts + "★");
result:1661308802.362939★

なお、修正前と修正後にtypeof()で調べたところどちらもString型でした。

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

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

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

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

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

guest

回答2

0

Slackが返すタイムスタンプを数値として表示させるときに、GASで扱える浮動小数点数の範囲で扱おうとして
小数第6位が丸められている可能性があります。

さらに、setValues() の引数に数値型の変数を指定して実行した場合、
入力先のセルに設定されている表示形式が強制的に数値形式に上書きされてしまうようです。
したがって、setValues() の引数は、文字列型に変換した変数を指定する必要があるようです。

(質問文の追記では、「event.param,tsをtypeof で調べたところ 文字列型だった」 とのことなので、なぜ丸められてしまうのかは不明ですが)


① まず、対象セルの表示形式を数値ではなく、書式なしテキストに変える
<手動でのやり方>
小数第6位まで表示させたいセルをクリック
メニュー→表示形式→数字→カスタム数値数式
「@」と入力して「適用」ボタンをクリック
<GASでのやり方>
GASコード内で、setValueを行っている部分の前に
sheet.getRange(行,列).setNumberFormat("@");
の行を追加する。

②次に、そのあとの入力部分について
sheet.getRange(66,30).setValue(params.event.ts.toString());
のように、末尾にtoString() を付ける。

(または、これでも治らなければ、末尾に空白文字を付けてみる
sheet.getRange(66,30).setValue(params.event.ts.toString() +" ”);

例)

js

1function main(params){ 2 3 var spreadsheet = SpreadsheetApp.openById('XXXXXXXXXXXXXXXX'); 4 var sheet = spreadsheet.getSheetByName('XXXX'); 5 6//書式なしテキストに設定 7 sheet.getRange(66,30).setNumberFormat("@"); 8 9 //parseしたデータからevent.tsを指定 10 sheet.getRange(66,30).setValue(params.event.ts.toString()); 11以下省略 12}

投稿2022/08/23 23:42

編集2022/08/25 09:57
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Stupid

2022/08/24 00:53 編集

表示形式の問題ではなく、そもそもセルに記載されている値が5桁までになってしまうんです。 (sheet.getRange(行,列).setNumberFormat("0,000000");に置き換えて実行してみましたがダメでした、、)
退会済みユーザー

退会済みユーザー

2022/08/24 02:13 編集

GASの制限により、小数の桁が丸められているのだと思います。 回答に記載した通り、タイムスタンプを入力するセルを「書式なしテキスト」に変えてみてください。 (仮に「タイムスタンプを使って何か計算させたいからテキストにしたくない」というような場合は、桁数が丸められるのを受け入れるしかないと思います)
Stupid

2022/08/24 02:41

ご回答いただきました内容では解決できませんでした。
退会済みユーザー

退会済みユーザー

2022/08/24 03:30 編集

入力対象となるセルを 書式なしテキストに変更したうえで、 GASの入力部分を sheet.getRange(行,列).setValue(params.event.ts.toString()); とした場合はどうでしょうか。 あと、そちらの過去の質問を参照すると、「質問文には記載していなかったコード(質問者しか知りえない情報)」が結局原因で、そこを直して自己解決となっているような質問が多く見受けられました。 そのような場合、こちらは当然エスパーではないので、せっかくいろいろ試行錯誤して手間をかけて回答したことが無駄骨になってしまいます。 本件もそのようなことはないでしょうか。仮にそうならば、質問対象の内容は省略せず、全部開示してください。
Stupid

2022/08/25 04:54

以下省略の部分は本当に関係ないのです。 jangoのレンダリングみたいにコメントアウトしている部分もありませんし、ほかの関数があるぐらいに思っておいてください。 また、そこまで工数おかけしてしまい申し訳ありません。 解決決しなくても後工程に響かないが、気になる程度の気持ちでこちらのサイト利用させていただいてたので温度感に違いがあるのでしょうね。 お手数おかけし申し訳ございません。
退会済みユーザー

退会済みユーザー

2022/08/25 10:49 編集

sheet.getRange(行,列).setValue(params.event.ts.toString())としてもダメでしたか?
guest

0

自己解決

結論試したことで記載した通り、params.event.tsの後ろに文字列を追加することで対応いたしました。

なお、後工程でタイムスタンプが必要になるのですがこちらは文字列を追加せずとも小数点以下6桁で利用できること確認できました。

投稿2022/08/25 04:43

Stupid

総合スコア21

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問