我有这个功能,可以自动分配某些行中单元格被填充的时间。它在数据表中工作正常,但在我为此表创建的网络应用程序中,显示了非常错误的日期。时间显示为 1899 年 12 月 30 日。
这是代码:
function onEdit(e) {
var sheet = e.source.getActiveSheet();
var range = e.range;
var column = range.getColumn();
// Check if the edited cell is in column 2 (B), 5 (E), or 8 (H)
if (column == 2 && sheet.getName() == "Join Queue [FOR ADVISEES]") { // Column 2
var row = range.getRow();
var dateCell = sheet.getRange(row, 1);
if (dateCell.getValue() === "") {
dateCell.setValue(new Date());
}
sheet.getRange(blankRow, 7).setValue(Session.getActiveUser().getEmail());
} else if (column == 6 && sheet.getName() == "Join Queue [FOR ADVISEES]") { // Column 6
var row = range.getRow();
var timeCell = sheet.getRange(row, 9);
if (timeCell.getValue() === "") {
var currentTime = new Date();
var formattedTime = Utilities.formatDate(currentTime, Session.getScriptTimeZone(), "HH:mm:ss");
timeCell.setValue(formattedTime);
}
} else if (column == 8 && sheet.getName() == "Join Queue [FOR ADVISEES]") { // Column 8
var row = range.getRow();
var timeCell = sheet.getRange(row, 10);
if (timeCell.getValue() === "") {
var currentTime = new Date();
var formattedTime = Utilities.formatDate(currentTime, Session.getScriptTimeZone(), "HH:mm:ss");
timeCell.setValue(formattedTime);
}
}
}
这是它们在网络应用程序中的显示方式(顺便说一句,这些来自两个 else if 语句):
现在,我注意到主 if 语句中的代码给出了正确的日期和时间,在这里:所以我尝试使用与此相同的代码,并将其用于其余列。所以代码变成:
function onEdit(e) {
var sheet = e.source.getActiveSheet();
var range = e.range;
var column = range.getColumn();
// Check if the edited cell is in column 2 (B), 5 (E), or 8 (H)
if (sheet.getName() == "Join Queue [FOR ADVISEES]" && [2, 6, 8].includes(column)) {
var row = range.getRow();
var dateCell;
if (column == 2) { // Column 2
dateCell = sheet.getRange(row, 1);
if (dateCell.getValue() === "") {
dateCell.setValue(new Date());
}
sheet.getRange(row, 7).setValue(Session.getActiveUser().getEmail());
} else if (column == 6) { // Column 6
dateCell = sheet.getRange(row, 9);
if (dateCell.getValue() === "") {
dateCell.setValue(new Date()); // Set current date and time
}
} else if (column == 8) { // Column 8
var statusCell = sheet.getRange(row, 8);
if (statusCell.getValue() === "DONE") {
dateCell = sheet.getRange(row, 10);
if (dateCell.getValue() === "") {
dateCell.setValue(new Date()); // Set current date and time
}
}
}
}
}
然而,它并没有像第一个那样出来,只是年份改变了。从 1899 年开始,现在已经到了 1970 年。
这只是我的猜测。
new Date()
或formattedTime
的HH:mm:ss
的值被放入带有setValues
的单元格中。在这种情况下,我猜想这些值作为日期对象放入单元格中,并且单元格值显示为 HH:mm:ss
。It works fine in the datasheet, but in the web app that I created for this sheet, VERY wrong dates are being displayed. The time is being read as December 30, 1899.
,And here's how they are being shown in the web app (these are from the two else if statements btw):
和您的显示图像,我担心用于创建网络应用程序的脚本可能不会显示在您的问题中。如果您通过 getValues
检索单元格值并且在 Web 应用程序的 Javascript 端使用检索到的值,这可能是您当前显示图像中出现问题的原因,因为日期对象直接在表格单元格值中使用。为了解决这个问题,我建议将getValues()
修改为getDisplayValues()
。这样,单元格值将直接用作检索值。从以上几点来看,关于创建您的Web Apps的脚本或用于在您的图像的Web Apps上创建HTML表格的脚本,请修改如下。
getValues()
到getDisplayValues()
并再次测试。
如果您使用Web Apps,当您修改Web Apps的Google Apps脚本时,请将部署修改为新版本。这样,修改后的脚本就会反映在Web Apps中。请注意这一点。
您可以在我的报告“重新部署 Web 应用程序而不更改新 IDE 的 Web 应用程序的 URL(作者:我)”中查看详细信息。