[英]Google sheets script writing, how do I prevent an auto update or recacluation of my timestamps in googel sheets?
我附上了我在google中运行的电子表格的副本。 这个概念是当某人开始接订单时,例如他们将在I3中键入其姓名,然后他们的时间就会开始。 完成后,他们将在J3中键入自己的名字,每个名字都会导致以下时间戳,从而导致总持续时间。 稍后它将考虑百分比。
问题在于时间戳似乎是在不提示的情况下随机更新的。 它似乎是在打印或重新打开时。 这将导致时间和百分比不正确。 任何帮助将不胜感激
看来我应该写一个脚本来满足这种需要,但是我对如何做到这一点一无所知。 谷歌文档帮助论坛中的回复将我定向到了该论坛。
我认为您无法选择要更新或重新计算的单元格(如果我错了,请告诉我)。
未优化的解决方法(也许某些专家获得了更好的解决方案):
function onEdit(e){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var i = 3;
while(i <= sheet.getLastRow())
{
var data = sheet.getRange(i, 9, 3, 2).getValues();
if(data[1][0].length == 0)
{
if(data[0][0] != "")
{
var d = new Date();
sheet.getRange(i+1, 9).setValue(d);
}
}
if(data[1][1].length == 0)
{
if(data[0][1] != "")
{
var d = new Date()
sheet.getRange(i+1, 10).setValue(d);
}
}
i=i+3;
}
}
onEdit(e)函数是Google Spreadsheet中的一个简单触发器实现。 每次编辑单元格时都会触发。
在上面的这段代码中,我们反复检查每个元素是否添加了名称。 如果是这样,代码会将日期和时间设置为刚添加的名称下方。 由于您将值设置为一瞬间,因此任何自动更新都不会修改这些时间。
对于这种解决方法,您需要删除放在要添加时间戳的单元格上的公式(即I4和J4)。 您可以保留计算时间差的单元格,它们应该可以正常工作。
在脚本编辑器中的脚本下方粘贴并保存。
function onEdit(e) {
if (e.range.rowStart % 3 != 0 || [9, 10].indexOf(e.range.columnStart) == -1) return;
var o = e.range.offset(1, 0);
if (!o.getValue()) o.setValue(new Date())
}
不要通过在脚本编辑器中单击“播放”按钮来运行脚本。 而是返回到任何选项卡,清除现在具有= now()公式的所有单元格并输入名称。 查看是否显示时间戳。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.