我有一张谷歌表,每天由超过20人编辑。有时会发生某人在"日期栏"中粘贴日期之外的东西。或者只是简单的格式写日期。所以我希望制作一个脚本,将日期格式设置为" yyy-mm-dd",然后设置数据验证以检查日期是否正确(以避免出现类似&#34的日期; 2017- 22 -17"),如果您粘贴或写错了日期,最后会弹出消息框。 我写了下面的代码并触发了它" onEdit"但我无法处理这个弹出消息的事情; /
function SetDateFormat() {
var ss = SpreadsheetApp.getActiveSpreadsheet()
var sheet = ss.getSheetByName("Sheet1")
var cell = sheet.getRange(4, 3, sheet.getMaxRows())
cell.setNumberFormat('yyyy-mm-dd')
}
function setAndCheckDate() {
var ss = SpreadsheetApp.getActive()
var sheet =ss.getSheetByName("Sheet1")
var cell = sheet.getRange(4, 3, sheet.getMaxRows())
var rule1 = cell.getDataValidation()
var rule2 =SpreadsheetApp.newDataValidation().requireDate().build()
cell.setDataValidation(rule2)
if(rule1 !== rule2) {
Browser.msgBox("Date is incorrect!")
}
}
另一件事是,当我将包含不正确数据的单元格粘贴到我的日期列时,验证脚本不起作用。
https://docs.google.com/spreadsheets/d/1ZPbfX60E46W95XhMTXpBSLTUAT71QCe-MFnYhYy2PPw/edit?usp=sharing
你可以建议吗?答案 0 :(得分:0)
您正在寻找Apps脚本中的formatDate(日期,时区,格式),它根据您描述的规范格式化日期。
// This formats the date as Greenwich Mean Time in the format
// year-month-dateThour-minute-second.
var formattedDate = Utilities.formatDate(new Date(), "GMT", "yyyy-MM-dd'T'HH:mm:ss'Z'");
Logger.log(formattedDate);
答案 1 :(得分:0)
最简单的答案是使用数据验证而不是脚本来控制人们可以在日期列中输入什么。
如果您担心有人故意删除数据验证或将值粘贴到单元格中,则可以使用以下脚本对从onEdit捕获的值进行检查,以检查该值是否为日期。
const cols = {
"date": 2 // column number that contains date
}
function onEdit(e) {
let range = e.range;
let col = range.getColumn();
if (col == cols.date) {
let value = range.getValue();
let newDate = new Date(value);
let timeCheck = newDate.getTime();
let isTime = (timeCheck === timeCheck);
if (!isTime) {
let message = "'" + value + "' is not a date. Please enter a valid date.";
let ui = SpreadsheetApp.getUi();
ui.alert(message);
range.setValue(""); // or however you want to handle a date error
}
}
}
如果该值不是有效日期,则返回的时间为NaN,并且NaN永远不等于自身。