google-apps-script - Google 表格:通过自动时间戳记录分阶段跟踪日期变化
问题描述
我正在尝试跟踪从下拉列表中选择特定阶段的日期,以便我可以测量阶段之间的时间。这是电子表格:https ://docs.google.com/spreadsheets/d/1GEJKCtLgsIobA0u3_GYqYwA6FQuSi64u4ORgTATn92U/edit?usp=sharing
我一直在使用不同的示例来记录单元格更改时的时间戳,但我似乎无法找到一种方法来根据下拉列表中选择的值在不同的单元格中记录时间戳。
有谁知道这样的事情是否可能?像这样的函数将为我获取单个列/单元格中的时间戳,但我希望能够填充与不同单元格中下拉列表中的值相对应的不同时间戳:
function onEdit() {
var s = SpreadsheetApp.getActiveSheet();
if( s.getName() == "Tracking" ) { //checks that we're on the correct sheet
var r = s.getActiveCell();
if( r.getColumn() == 2 ) { //checks the column
var nextCell = r.offset(0, 1);
if( nextCell.getValue() === '' ) //is empty?
var time = new Date();
time = Utilities.formatDate(time, "GMT", "HH:mm:ss");
nextCell.setValue(time);
};
};
}
解决方案
解决方案:
您需要对单元格值进行一些解析以分离数字分量、计算偏移单元格并在此处写入时间戳。
请注意,我修改后的代码还使用了 event object e
,因为这减少了对的调用SpreadsheetApp
并使每次执行速度更快一些。
示例代码:
function onEdit(e) {
var r = e.range;
var off = 0;
if (r.getSheet().getName() == "Tracking") { //checks that we're on the correct sheet
if (r.getColumn() == 2) { //checks the column
var arr = e.value.split(" "); // parse the cell value
if (arr[0] == "Start") {
off = 1;
}
else if (arr[0] == "Stage") {
off = parseInt(arr[1]) + 1; // compute offset
}
else return;
var nextCell = r.offset(0, off);
if (nextCell.getValue() === '') { //is empty?
var time = new Date();
time = Utilities.formatDate(time, "GMT", "HH:mm:ss");
nextCell.setValue(time);
}
}
}
}
样本输出:
参考:
推荐阅读
- outlook - MailboxNotEnabledForRESTAPI - Microsoft Graph API 与启用 HMA 的本地服务器集成
- php - 测试 facebook business-sdk 时出错
- open-telemetry - 从隐式上下文中获取当前活动范围
- python - 使用 Django 在多边形中实现点搜索
- javascript - 错误太多重新渲染。react 限制渲染次数以防止无限循环
- python - 错误:需要 Microsoft Visual C++ 14.0 或更高版本
- python - 在 python modulenotfounderror 中:没有名为“json”的模块
- python - Python np.fromfile 给出错误:Errno 2 No such file or directory
- android - 移动视频转码的最佳参数。请指教
- python - 如果不在值范围内,Python Pandas 会替换值