如何在状态列切换至指定状态时自动生成Timestamp至对应列?
解决方案
实现逻辑
通过Google Apps脚本的onEdit触发器监听Status列(第6列)的编辑事件:
- 当单元格值变为
In-Progress时,给同行的Time Started列(第7列)填充当前时间(默认仅第一次切换时填充,避免重复覆盖) - 当单元格值变为
completed时,给同行的Time Completed列(第8列)填充当前时间(同样默认仅第一次切换时填充)
具体脚本代码
function onEdit(e) { const editedRange = e.range; const editedSheet = editedRange.getSheet(); const editedCol = editedRange.getColumn(); const editedRow = editedRange.getRow(); const newStatus = e.value; // 仅处理第6列的编辑,且跳过表头行(假设表头在第1行) if (editedCol !== 6 || editedRow === 1) return; const currentTime = new Date(); switch(newStatus) { case "In-Progress": const timeStartedCell = editedSheet.getRange(editedRow, 7); // 仅当单元格为空时填充时间 if (timeStartedCell.getValue() === "") { timeStartedCell.setValue(currentTime); // 自定义时间格式,可按需修改 timeStartedCell.setNumberFormat("yyyy-MM-dd HH:mm:ss"); } break; case "completed": const timeCompletedCell = editedSheet.getRange(editedRow, 8); // 仅当单元格为空时填充时间 if (timeCompletedCell.getValue() === "") { timeCompletedCell.setValue(currentTime); timeCompletedCell.setNumberFormat("yyyy-MM-dd HH:mm:ss"); } break; default: break; } }
使用步骤
- 打开目标Google表格,点击顶部菜单栏的扩展程序 > Apps 脚本
- 清空编辑器默认代码,粘贴上述脚本
- 点击编辑器右上角保存按钮,给项目命名(比如「任务状态时间自动填充」)
- 返回表格测试:切换Status列的状态,对应时间列会自动填充当前时间
可选调整
- 如果需要每次切换状态都更新时间(而非仅第一次),删除代码中判断单元格为空的
if语句即可 - 若表头不在第1行,修改
editedRow === 1中的数字匹配实际表头行 - 时间格式可通过修改
setNumberFormat的参数调整,比如改为"MM/dd/yyyy hh:mm AM/PM"
内容的提问来源于stack exchange,提问作者David Young
相关产品推荐
相关产品推荐

