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 から取得しました。
Utilities.formatDate()
ユーティリティは、javascript文字列をフォーマットします。ただし、スプレッドシートに書き出されると、ユーザーインターフェースから入力した場合と同様に、新しいデータ行がGoogleスプレッドシートによって解釈され、データタイプと適切なフォーマットが決定されます。
認識可能な日付文字列が得られたので、Googleスプレッドシートはそれを日付であると判断し、そのように保存し、デフォルトの日付形式を適用します。
スプレッドシートの日付を書式設定のニーズに合わせるには、2つのオプションがあります。
日付のように見えても、文字列として解釈されるように強制します。
cell.setValue(Utilities.formatDate(new Date(), "GMT+10:00", "''yyyy-MM-dd"));
// ^^ force string literal
セルの日付形式を設定します。これにより、セルのvalueが日付として残り、計算に役立ちます。
日付形式は SimpleDateFormat 仕様に従います。
// Cell A1 contains a date
var cell = SpreadsheetApp.getActiveSheet().getRange("A1");
cell.setNumberFormat('yyyy-mm-dd');
解決 :
values[0][0] = Utilities.formatDate(new Date(),
"GMT+10:00", "yyyy-MM-dd").setNumberFormat('yyyy-mm-dd');