我正在构建一个跟踪特定数据的电子表格。勾选复选框时,我想在相应的相邻单元格中放置一个时间戳-另外,我对复选框上的注释注明上次被勾选为TRUE的时间也很满意。
我花了一整天的时间在Stackoverflow和google上搜索所有内容,并且尝试了许多不同的方法和功能。首先,我一直使用onEdit(e)
函数来(尝试并)添加时间戳。早期尝试发现了一个已知缺陷,这意味着onEdit(e)
并未捕获复选框更改状态的所有实例。我相应地更改了方法,既尝试将时间戳添加到相应的相邻单元格,又尝试在复选框单元格中添加注释-两者似乎都偶尔起作用,这非常令人沮丧。
此刻,我有三个主要问题:
知道用于检查复选框值的语法(我使用==还是===,并且我使用'
',"
还是不使用引号? )。这听起来像是一个非常愚蠢的问题,但是我在学习上遇到困难,并且在将书面信息保留在我的记忆中时遇到了很大的困难:(
成功设置了一个'if'->'else if'语句,该语句将根据复选框的状态“切换”打开或关闭时间戳。
我希望在复选框未选中时清除带有复选框上时间戳的注释,但是我确实有几次使它起作用,时区不正确。我做了很多关于timezone
的阅读,但是没有一个有效的示例,我无法理解如何将其实现到我的代码中。我是格林尼治标准时间+10
我提供了电子表格的精简版,其中仅包含我遇到问题的特定工作表和代码:
https://docs.google.com/spreadsheets/d/1NCdMziBpj0joSv9lQfqT9etz9hMsvgMeuT8X9XTxR20/edit?usp=sharing
这是我一直在努力的最新代码迭代。我可能已经尝试了六种完全不同的功能,但是在碰了几个小时后又删除了每个功能:
function onEdit() {
var ss = SpreadsheetApp.getActiveSheet();
if(ss.getName() == "Quests" ) { //checks that we're on the correct sheet
var tickboxCell = s.getActiveCell();
if(tickboxCell.getColumn() == 3 && tickboxCell.getValue() === 'TRUE' ) { //checks the status of the tickbox
var dateCell = tickboxCell.offset(0, 1);
dateCell.setValue(new Date());
}
}
}
这是我修改的用于向复选框添加注释的示例代码:
function setNote(note){
var note = note;
var cell = SpreadsheetApp.getActiveSheet().getActiveCell();
if(note == ""){
cell.clearNote();
}else{
cell.setNote(note);
}
}
我希望每当勾选一个复选框时,右侧的相应单元格都会输入date()
,或者该复选框会添加一个注释,说明“ Quest Completed:dd / mm / yyy”(+ 10 GMT时区)。然后,我希望可以清除时间戳记单元格,或者如果未选中复选框状态,则可以清除便笺。
答案 0 :(得分:3)
尝试一下:
function onEdit(e) {
if(e.range.getSheet().getName() != 'Quests') { return; }
if(e.range.columnStart==3 && e.value=="TRUE") {
e.range.offset(0,1).setValue(Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "yyyyMMdd:HHmm"));
}
}
答案 1 :(得分:1)
感谢Cooper,他使我的代码正确无误。它并没有完全满足我的期望,但是它使我能够对其进行一些小的更改,以完全获得我的期望。
编辑:我也找到了setNote
的解决方案,我将在这里提供。
向相邻单元格添加/删除日期的代码:
function onEdit(e) {
if (e.range.getSheet().getName() != 'Quests') { return; }
if (e.range.columnStart==3 && e.value=="TRUE") {
e.range.offset(0,1).setValue(new Date());
}
else if (e.range.columnStart==3 && e.value=="FALSE") {
e.range.offset(0,1).clearContent();
}
}
用于在带有正确时区的复选框中添加/删除setNote
的代码:
if(e.range.getSheet().getName() != 'Quests') { return; }
if(e.range.columnStart==3 && e.value=="TRUE") {
e.range.setNote('Completed: ' + Utilities.formatDate(new Date(), SpreadsheetApp.getActive().getSpreadsheetTimeZone(), "dd-MM-yy HH:mm:ss"));
}
else if (e.range.columnStart==3 && e.value=="FALSE") {
e.range.clearNote();
}