如何使用 Google Apps 脚本在 Google Sheet 中仅设置一段时间的格式?
How can I set formatting for just a time duration in a Google Sheet using Google Apps Script?
在另一个程序中,我计算了一个事件的持续时间。结果以秒为单位。在外部程序(使用 LuaScript)中,我将此秒结果转换为字符串,格式为“hh:mm:ss.SSS”。然后,我通过 Google Apps Script POST 将其 Google Sheets,我想将其写入下一个可用行 (ss.appendRow
)。它大部分显示正确,除了四舍五入到最接近的整数秒,而不是保持毫秒。
Google Sheets 正确地将此字符串识别为 date/time,但认为它是实际时间而不是持续时间。例如,如果事件耗时 5.75 秒,则单元格中的输出显示“00:00:05”,而当我 select 单元格时,它实际上显示“12:00:05 AM”。
按照我在这个网站上找到的建议,我尝试了这个代码:
function doPost(e) {
var s = SpreadsheetApp.openById(myID);
var ss = s.getSheetByName("TimeResults");
var params = JSON.parse(e.postData.contents);
ss.appendRow([Utilities.formatDate(new Date(params.draftDuration), s.getSpreadsheetTimeZone(), 'hh:mm:ss.SSS'));
return ContentService.createTextOutput('{"status":"ok"}').setMimeType(ContentService.MimeType.JSON);
}
但这导致了意外的输出,显示“5:00:00 AM”。显然,我错误地使用了 Date 对象。我应该怎么做才能使这项工作按预期进行,以显示持续时间,例如“00:00:05.75”?
这是 e.postData.contents
中包含的 JSON 的片段:
"gameDate": 05/07/2022
"draftDuration": 0:0:3.75
"gameDuration": 0:0:5.323
如果原始值以秒为单位,如 5.323
中的五秒和 323 毫秒,您可以将它转换为 dateserial 值,如下所示:
dataserial = seconds / 24 / 60 / 60
将结果值附加到电子表格并将单元格或整列的格式设置为持续时间,例如 [h]:mm:ss.SSS
,其中 [h]
表示经过的小时数。
小时字段需要表示为经过的小时数才能正确处理超过 24 小时的持续时间。分秒不超过60,无论表示日历时间还是经过时间,都可以同样处理。
有关日期和时间值在电子表格中的工作原理的说明,请参阅 this answer。
在另一个程序中,我计算了一个事件的持续时间。结果以秒为单位。在外部程序(使用 LuaScript)中,我将此秒结果转换为字符串,格式为“hh:mm:ss.SSS”。然后,我通过 Google Apps Script POST 将其 Google Sheets,我想将其写入下一个可用行 (ss.appendRow
)。它大部分显示正确,除了四舍五入到最接近的整数秒,而不是保持毫秒。
Google Sheets 正确地将此字符串识别为 date/time,但认为它是实际时间而不是持续时间。例如,如果事件耗时 5.75 秒,则单元格中的输出显示“00:00:05”,而当我 select 单元格时,它实际上显示“12:00:05 AM”。
按照我在这个网站上找到的建议,我尝试了这个代码:
function doPost(e) {
var s = SpreadsheetApp.openById(myID);
var ss = s.getSheetByName("TimeResults");
var params = JSON.parse(e.postData.contents);
ss.appendRow([Utilities.formatDate(new Date(params.draftDuration), s.getSpreadsheetTimeZone(), 'hh:mm:ss.SSS'));
return ContentService.createTextOutput('{"status":"ok"}').setMimeType(ContentService.MimeType.JSON);
}
但这导致了意外的输出,显示“5:00:00 AM”。显然,我错误地使用了 Date 对象。我应该怎么做才能使这项工作按预期进行,以显示持续时间,例如“00:00:05.75”?
这是 e.postData.contents
中包含的 JSON 的片段:
"gameDate": 05/07/2022
"draftDuration": 0:0:3.75
"gameDuration": 0:0:5.323
如果原始值以秒为单位,如 5.323
中的五秒和 323 毫秒,您可以将它转换为 dateserial 值,如下所示:
dataserial = seconds / 24 / 60 / 60
将结果值附加到电子表格并将单元格或整列的格式设置为持续时间,例如 [h]:mm:ss.SSS
,其中 [h]
表示经过的小时数。
小时字段需要表示为经过的小时数才能正确处理超过 24 小时的持续时间。分秒不超过60,无论表示日历时间还是经过时间,都可以同样处理。
有关日期和时间值在电子表格中的工作原理的说明,请参阅 this answer。