我正在尝试创建一个基本的时间戳脚本。简而言之,我运行的某些任务会经历不同的状态(状态1、2、3等)。我想跟踪每个任务(行)每个状态的时间戳。
我已经有一个代码可以执行此操作,但是仅当我在第一列中手动输入一个状态(时间戳已正确添加到其各自的状态列中)时,但我一次不能更新多个状态。
如果我粘贴多个“状态”,则脚本仅基于第一行运行时间戳,而不考虑其他状态。这是一段很短的视频,展示了它的功能:https://drive.google.com/file/d/1IkbtP9u0PJOpi8UAV80rXK9wnI0m4jo5/view?usp=sharing
我将在一个大文件中使用该脚本,该文件会自动更新,但无法正常工作。这是我当前正在使用的代码(如果很简单,请道歉,我充其量是业余爱好者)。
function OnEdit(e) {
var range = e.range;
var sheet = range.getSheet();
var row = range.getRow();
var rows = range.getNumRows();
var date = new Date();
var dates = sheet
.getRange(row, 3, rows)
.getValues()
.map(function(row) {return [row[0] || date];});
if(sheet.getRange(row, 1,rows).getValue()==1) { sheet
.getRange(row, 2, rows)
.setValues(dates);
}
else
{if(sheet.getRange(row, 1,rows).getValue()==2) { sheet
.getRange(row, 3, rows)
.setValues(dates);
}
else
{if(sheet.getRange(row, 1,rows).getValue()==3) { sheet
.getRange(row, 4, rows)
.setValues(dates);
}
}
}
}
如果status = 1,则在“ Col B”中插入时间戳,如果status = 2,则在“ Col C”中插入时间戳,依此类推。
任何帮助将不胜感激(经过几天的搜索并且找不到类似的情况),这是我正在工作的工作表:https://docs.google.com/spreadsheets/d/14xujKhSgnlBnA0o84UkArRfBP1GVwYOTDQQynaWQm34/edit#gid=0
答案 0 :(得分:1)
尝试一下:
因此,现在您可以编辑一个单元格或复制多个单元格,然后将其粘贴到column1中,时间戳将出现在e.range.columnStart + whatever the selection in column one was
列中。我在第一列上使用了数据验证,但是您可以做任何您想做的事情。您可能需要添加类似if(e.range.getSheet().getName()!='Sheet1'){return;}
function onEdit(e) {
var timeStamp=Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "E MMM/dd/yyyy HH:mm:ss");
if(e.range.columnStart==1 && e.range.rowStart>1) {//if you are editing column1
var sA=e.range.getValues();//get all values in range
for(var i=0;i<sA.length;i++) {
e.range.getSheet().getRange(e.range.rowStart+i,Number(sA[i][0]) + e.range.columnStart).setValue(timeStamp);
}
}
}
这是我的工作表的样子:
我为更多时间戳列添加了一些选择
具有其他要求的替代解决方案:
function onEdit(e) {
var timeStamp=Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "E MMM/dd/yyyy HH:mm:ss");
if(e.range.columnStart==1 && e.range.rowStart>1) {//if you are editing column1
var sA=e.range.getValues();//get all values in range
for(var i=0;i<sA.length;i++) {
var ts=e.range.getSheet().getRange(e.range.rowStart+i,Number(sA[i][0]) + e.range.columnStart).getValue();
if(sA[i][0]>0 && !ts) {
e.range.getSheet().getRange(e.range.rowStart+i,Number(sA[i][0]) + e.range.columnStart).setValue(timeStamp);
}
}
}
}
此列按列标题名称进行选择,以便您可以将列添加到column1的左侧。在这种情况下,它也将动作限制为特定的工作表Sheet92。
function onEdit(e) {
if(e.range.getSheet().getName()!='Sheet92'){return;}
var colName=e.range.getSheet().getRange(1,e.range.columnStart).getValue();
var timeStamp=Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "E MMM/dd/yyyy HH:mm:ss");
if(colName=='Status Choice' && e.range.rowStart>1) {
var sA=e.range.getValues();
for(var i=0;i<sA.length;i++) {
var ts=e.range.getSheet().getRange(e.range.rowStart+i,Number(sA[i][0]) + e.range.columnStart).getValue();
if(sA[i][0]>0 && !ts) {
e.range.getSheet().getRange(e.range.rowStart+i,Number(sA[i][0]) + e.range.columnStart).setValue(timeStamp);
}
}
}
}