如何实现Google Sheets勾选复选框时添加日期戳,取消时清除?
修正Google Sheets复选框日期戳脚本问题
需求:当某行复选框被勾选时,在该行指定单元格添加日期戳;取消勾选时清除该日期戳。原脚本仅能在勾选时添加日期,取消勾选时无法清除。
修正后的完整代码
function onEdit(e) { // 获取触发编辑事件的工作表对象 var activeSheet = e.source.getActiveSheet(); // 仅在"Writing Team Tasks"工作表中执行逻辑 if (activeSheet.getName() !== "Writing Team Tasks") return; // 获取被编辑的单元格对象 var editedCell = e.range; // 仅处理第5列(E列)的单元格编辑(假设复选框在E列) if (editedCell.getColumn() !== 5) return; // 获取目标单元格:当前编辑单元格向右偏移4列(即E列+4列=I列) var targetCell = editedCell.offset(0, 4); // 复选框勾选时值为true,取消时为false if (editedCell.getValue() === true) { // 勾选时设置当前日期 targetCell.setValue(new Date()); } else { // 取消勾选时清空目标单元格内容 targetCell.clearContent(); } }
原脚本的问题说明
- 复选框值判断错误:Google Sheets的复选框值是布尔类型(
true/false),原脚本用r.getValue() === ""判断,取消复选框时值是false而非空字符串,导致无法触发清空逻辑。 - 注释错误:原脚本中
if( r.getColumn() == 5 )的注释写的是"checks that the cell being edited is in column A",但第5列是E列,注释与实际逻辑不符。 - 冗余语法:原脚本中
var nextCell = r.offset(0, 4);后面多了一对大括号,属于无效语法。 - 未使用事件对象:原脚本用
getActiveCell()获取单元格,不如直接使用编辑事件对象e更可靠,避免多用户编辑时的冲突。
内容的提问来源于stack exchange,提问作者Tech Support
相关产品推荐
相关产品推荐

