我在gsheet上有以下代码 -
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var task = ss.getRange(1,2).getValue(); //ss.getRange("A2").getValue();
var date = new Date();
function onEdit(e) {
if (e.range.getA1Notation() == 'B2') {
if (/^\w+$/.test(e.value)) {
// console.log(e.value);
eval(e.value)();
e.range.clear();
}
}
}
function Start() {
var last = ss.getLastRow();
ss.getRange(last+1, 1).setValue(task);
ss.getRange(last+1, 2).setValue(date);
}
function End() {
var last = ss.getLastRow();
ss.getRange(last, 3).setValue(date);
var endTime = ss.getRange(last, 3).getValue();
var startTime = ss.getRange(last, 2).getValue();
ss.getRange(last, 4).setValue(endTime-startTime);
}
每当B2中的单元格被编辑时,它就会运行一个经过验证的函数名称 - 开始或结束。
如果' start',它将单元格b1(已验证的任务名称列表)的值放在第一列,将当前时间放在MM / DD / YYYY HH:MM:SS格式中。
如果'结束',它是第三列中MM / DD / YYYY HH:MM:SS格式的当前时间,并试图将" start"时间和"结束"第四列中的时间,或计算。
这是错误(或者我对gsheets的工作原理缺乏了解)
代码产生以下内容:
Task| Start | End | Duration
DOS | 8/2/2017 16:44:28 | 8/2/2017 16:44:31 | 2,418.00
问题 - 什么是2,418?总持续时间应为2秒,或00:00:02。鉴于上述代码,它是代码问题还是单元格问题的格式?
当我放入单元格d2 = c2-b2时,只要将列格式化为持续时间,它就可以正常工作。但我不愿意这样做,因为插入或开始/结束时间取决于最后一行 - 所以如果我将公式复制/粘贴到gsheet的底部,那么数据将不会连续。
答案 0 :(得分:1)
JavaScript时间戳以毫秒为单位。除以1000得到秒。
另外,像你一样使用eval
似乎是一个非常糟糕的主意。我会在那里使用switch
语句,如果输入的函数不是选项之一,则会为用户显示错误。如果他们输入“stat”而不是“start”,你的代码会默默地失败。