Javascript 使用Google Apps脚本在Google工作表中附加带有日期的行,并保留工作表中指定的日期格式

Javascript 使用Google Apps脚本在Google工作表中附加带有日期的行,并保留工作表中指定的日期格式,javascript,date,google-apps-script,format,Javascript,Date,Google Apps Script,Format,我的工作表中有一列具有自定义日期格式。格式是在整个列上设置的。如果在工作表内的列中输入日期值,则会显示我指定的格式。但是,如果我使用谷歌应用程序脚本附加一个新行,它将不会遵守格式 在通过Google Apps脚本添加行之前: | Timestamp | Message | |---------------------------|---------| | 2019-01-01 @ 13:12:32.013 | test | 添加行后: | Timestam

我的工作表中有一列具有自定义日期格式。格式是在整个列上设置的。如果在工作表内的列中输入日期值,则会显示我指定的格式。但是,如果我使用谷歌应用程序脚本附加一个新行,它将不会遵守格式

在通过Google Apps脚本添加行之前:

| Timestamp                 | Message |
|---------------------------|---------|
| 2019-01-01 @ 13:12:32.013 | test    |
添加行后:

| Timestamp                 | Message |
|---------------------------|---------|
| 2019-01-01 @ 13:12:32.013 | test    |
|         1/2/2019 14:51:31 | test2   |
添加行的Google Apps脚本代码:

SpreadsheetApp.getActiveSheet().appendRow([new Date(), "test2"])
是否有一种方法可以让工作表按照格式化规则格式化要添加的日期

我发现的唯一方法是将数据转换成一个整数,表示自1899-12-30年以来的天数,但这似乎非常困难

var dateSerial = ((new Date()) - (new Date(1899, 11, 30))) / 1000 / 60 / 60 / 24;

正如@Cooper在他的评论中提到的,您可以通过
Utilities.formatDate()
实现这一点

我用下面的脚本进行了测试,日期格式完全符合您的要求

function addDate() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getActiveSheet();
  var tz = ss.getSpreadsheetTimeZone();
  var d = Utilities.formatDate(new Date(), tz, 'yyyy-MM-dd @ hh:mm:ss.SSS');
  sh.appendRow([d,'test']);
}
您真正需要感兴趣的是定义日期的
var d
。我使用了电子表格时区,但是你可以使用任何你喜欢的时区

var d = Utilities.formatDate(new Date(), tz, 'yyyy-MM-dd @ hh:mm:ss.SSS');
编辑:

用户不希望在脚本本身中设置日期格式,相反,我们可以使用
getNumberFormat()
从上面的列中获取数字格式,然后使用
setNumberFormat()
基于此格式化新条目

有关详细信息,请参见下面的脚本

function setDate() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getActiveSheet();
  var lr = sh.getLastRow();

  //get format for last row in column A
  var format = sh.getRange(lr, 1).getNumberFormat();

  //add new data to sheet
  sh.appendRow([new Date(), 'test']);

  //format new data
  sh.getRange(lr+1, 1).setNumberFormat(format);
}

您尝试过setNumberFormat()吗?或者可能是Utilities.formatDate()?这两者都需要从JavaScript设置格式。如果表格中的格式改变了,那么我必须更新代码。我希望能够在需要的时候/如果需要的话更改工作表中的格式,而不必更新代码。我想我们只是不同而已。我更喜欢在代码中执行。@Cooper我正在编写代码,其他人将使用该工作表。我不希望在更改日期格式时/如果更改日期格式,代码会中断。这需要我在Javascript中设置格式。请参阅上面我对Cooper的回复。@IMTheNachoMan我刚刚用一个解决方案编辑了答案,应该可以满足您的要求。谢谢。我会看看这是怎么回事。我想看看有什么更有效,拉取数据格式,然后重新设置或只是将值添加为
dateserial
。谢谢