web-dev-qa-db-ja.com

Google Apps Scriptの日付形式の問題(Utilities.formatDate)

Google Apps Scriptは初めてなので、ご容赦ください。

Googleスプレッドシートで銀行から毎日の金利を収集しています。次のコードを使用して、A5:F5に含まれるレートの新しい行を追加し、列Aに日付を含めています。

function recordHistory() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Interest Rates");
  var source = sheet.getRange("A5:F5");
  var values = source.getValues();
  values[0][0] = Utilities.formatDate(new Date(), "GMT+10:00", "yyyy-MM-dd");
  sheet.appendRow(values[0]);

};

私の問題はこれです-日付形式を "yyyy-MM-dd"に指定しましたが、新しい行の列Aの日付はこの形式 "M/dd/yyyy"で作成されます。

Googleスプレッドシートのドロップダウンの[フォーマット]メニューを使用して、列A全体を「yyyy-MM-dd」で事前フォーマットしてみましたが、上のコードを実行すると、新しい行はまだ「M/dd/yyyy」のままです。

それは私のコードがUtilities.formatDateを完全に無視するかのようです。参考までに、上記のコードは here から取得しました。

8
sactyr

Utilities.formatDate()ユーティリティは、javascript文字列をフォーマットします。ただし、スプレッドシートに書き出されると、ユーザーインターフェースから入力した場合と同様に、新しいデータ行がGoogleスプレッドシートによって解釈され、データタイプと適切なフォーマットが決定されます。

認識可能な日付文字列が得られたので、Googleスプレッドシートはそれを日付であると判断し、そのように保存し、デフォルトの日付形式を適用します。

スプレッドシートの日付を書式設定のニーズに合わせるには、2つのオプションがあります。

  1. 日付のように見えても、文字列として解釈されるように強制します。

    cell.setValue(Utilities.formatDate(new Date(), "GMT+10:00", "''yyyy-MM-dd"));
    //                                                           ^^ force string literal
    
  2. セルの日付形式を設定します。これにより、セルのvalueが日付として残り、計算に役立ちます。

    日付形式は SimpleDateFormat 仕様に従います。

    // Cell A1 contains a date
    var cell = SpreadsheetApp.getActiveSheet().getRange("A1");
    cell.setNumberFormat('yyyy-mm-dd');
    
10
Mogsdad

解決 :

values[0][0] = Utilities.formatDate(new Date(), 
"GMT+10:00", "yyyy-MM-dd").setNumberFormat('yyyy-mm-dd');
1
Cory Kapty