Javascript 使用Google Apps脚本在Google工作表中附加带有日期的行,并保留工作表中指定的日期格式
我的工作表中有一列具有自定义日期格式。格式是在整个列上设置的。如果在工作表内的列中输入日期值,则会显示我指定的格式。但是,如果我使用谷歌应用程序脚本附加一个新行,它将不会遵守格式 在通过Google Apps脚本添加行之前: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
| 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
。谢谢