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

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

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

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

JavaScript

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

Q&A

解決済

1回答

142閲覧

GAS 日付形式で送信されてしまう

aneig

総合スコア10

Google スプレッドシート

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

JavaScript

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

0グッド

1クリップ

投稿2025/03/03 03:59

実現したいこと

左の表を右の表の項目にそのままの書式で送信したい
イメージ説明

発生している問題・分からないこと

左の表から送信後、右の表のJANコードが日付形式で送信されてしまう(G3のみ)

該当のソースコード

function mailso(){ // 送信者のセル const itemCellName = 'G14'; // 左の表の列数 const numColumns = 4; // 左の表の記入開始列 const logStartColumn = 3; // 左の表の行数 const numColumns2 = 10; // 記入開始行 const logStartColumn2 = 3; // それぞれのシートを取得 const itemSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('左の表'); const logSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('右の表'); // 左の表の基準セルの行番号と列番号 const startCell = itemSheet.getRange("f3"); const itemStartRow = startCell.getRow(); //行 const itemStartColumn = startCell.getColumn();//列 // 見出しを作成 const date = Utilities.formatDate(new Date(), 'JST', 'yyyy/MM/dd'); const item = itemSheet.getRange(itemCellName).getValue(); const titles = [date,item]; // 右の表の最終行 const logLastRow = logSheet.getLastRow(); // 左の表の履歴データを取得 const values = itemSheet .getRange(itemStartRow, itemStartColumn, numColumns2, numColumns) .getValues(); // 右の表に履歴見出しを記入 logSheet .getRange(logLastRow + 1, 1, 1, titles.length) .setValues([titles]); // 右の表に履歴データを記入 logSheet .getRange(logLastRow + 1, logStartColumn, values.length, values[0].length) .setValues(values); Logger.log(values); }

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

何となく原因はわかるものの、GAS初心者の為どう対処していいかわからないので
ご教授いただきたいです。

考えられる原因↓
複数行送信時でも1行目のみ日付に変換されてしまうため、
左の表からの送信時に”メール送信日”をUtilities.formatDate(new Date(), 'JST', 'yyyy/MM/dd')で今日の日付を出すようにしているからそこが影響している?

補足

特になし

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

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

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

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

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

dodox86

2025/03/05 04:29

質問に付けるタグとして「JavaScript」はありますが、サーバーサイドで実行されるGoogle Apps Scriptに依存した部分もあるので次からは「Google Apps Script」もタグに追加すると知見のある方の目に留まって良いと思います。
aneig

2025/03/05 05:04

アドバイスありがとうございます! 次回から追加しようと思います
guest

回答1

1

ベストアンサー

ご提示のGASのスクリプトだけだと問題が再現しませんが、画像と以下の情報をもとに修正してやってみると、確かに「右の表」シートにてJANコード部分が"1970/01/01"になってしまいますね。

左の表からの送信時に”メール送信日”をUtilities.formatDate(new Date(), 'JST', 'yyyy/MM/dd')で今日の日付を出すようにしているからそこが影響している?

惜しい。「左の表」シートのG列全体の表示形式が影響しているようです。このG列全体の表示形式を「日付」にしても入力済みのJANコード部分の表示自体はそのままですが、スクリプトを実行して「右の表」シートに貼り付けると"1970/01/01"になってしまいます。元の値であるJANコードの変換が失敗した結果、シリアル値として0となり、紀元(epoch)0を日付表記とした"1970/01/01"が出力されている様子です。

解決方法として考えられるのは2つありそうで、1つめとしては 「左の表」シートのG列全体の表示形式として「自動」(0.###############)を選択しておく、です。

「自動」を選択しているとき「左の表」シートのG13セルにメール送信日をセットすると日付の形式(yyyy/MM/dd)になってしまいますが、他のセルには影響しないのでJANコードもそのまま「右の表」シートへセットできると思います。尚、G列全体の表示形式を「自動」ではなく「書式なしテキスト」にするとメール送信日をセットしても「書式なしテキスト」のままなので、それでも良ければそうしてみてください。

2つめとしては問題の1行目の JANコードのG3のセルをスクリプトで「書式なしテキスト」にする、です。
具体的にはmailso関数中のgetRangeで左の表の履歴データ取得する直前にでも、以下のようなコードでG3セルの表示形式を変更します。

GAS

1... 2 // 右の表の最終行 3 const logLastRow = logSheet.getLastRow(); 4 5 // G3セルの表示形式に「書式なしテキスト」を設定 6 itemSheet.getRange('G3').setNumberFormat('@'); 7 8 // 左の表の履歴データを取得 9 const values = itemSheet 10 .getRange(itemStartRow, itemStartColumn, numColumns2, numColumns) 11 .getValues(); 12... 13

この修正でもいけると思います(当方では確認済み)。JANコードのデータが複数行あってG3セルのみセットするのが気持ち悪い(?)のであれば、他のセルもセットすれば良いでしょう。

setNumberFormat(numberFormat) - Google Apps Script

セルに値をセットすることで表示書式がどのように変わってしまうのかは、恐らくGoogleスプレッドシートとGoogle Apps Scriptの現時点の仕様によると思いますので、気を付けておいた方が良いかもしれません。

投稿2025/03/05 04:23

dodox86

総合スコア9369

Lhankor_Mhy👍を押しています

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.32%

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

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

質問する

関連した質問