多个标签中的同一个Google表格中的多个时间戳

时间:2017-09-08 18:19:17

标签: google-sheets tabs timestamp

您好,我试图让我的电子表格在此电子表格中的不同标签中包含多个时间戳。每当在J列中编辑数据时,我想要一个时间戳立即填充在K列中。我在1 Google Sheet中有4张表,我需要所有这些表以独立运行此自动时间戳。谢谢你的帮助。我已经尝试过寻找其他帖子,但很难修改其他人的代码来为我自己的代码工作。

我使用以下脚本函数来获取此时间戳。当我只有一个标签到谷歌表时它工作正常。但是现在我有多个标签,它只更新一张。试图弄清楚如何让它在整个文档中做同样的事情。

    function onEdit(event)
{ 
  var timezone = "EST";
  var timestamp_format = "MM-dd-yyyy HH:mm:ss"; // Timestamp Format. 
  var updateColName = "PM Status ";
  var timeStampColName = "Date Update";
  var sheet = event.source.getSheetByName('Walt'); //Name of the sheet where you want to run this script.


  var actRng = event.source.getActiveRange();
  var editColumn = actRng.getColumn();
  var index = actRng.getRowIndex();
  var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues();
  var dateCol = headers[0].indexOf(timeStampColName);
  var updateCol = headers[0].indexOf(updateColName); updateCol = updateCol+1;
  if (dateCol > -1 && index > 1 && editColumn == updateCol) { // only timestamp if 'Last Updated' header exists, but not in the header row itself!
    var cell = sheet.getRange(index, dateCol + 1);
    var date = Utilities.formatDate(new Date(), timezone, timestamp_format);
    cell.setValue(date);
  }
}

1 个答案:

答案 0 :(得分:0)

你走了。设置onEdit()触发器。我测试了它。有用。它目前适用于电子表格中的所有工作表,但很容易将其限制为特定工作表。您可以将所有必需的工作表放入var wantedSheets=['Sheet1','Sheet2','Sheet3','Sheet4'];这样的数组中,然后执行wantedSheets.indexOf()以查看当前工作表是否已进入。

function onTimeStampEdit(e) 
{
    var ss=e.source;
    var sh=ss.getActiveSheet();
    var rg=e.range;
    var row=rg.getRow();
    var col=rg.getColumn();
    if(col==9 || col==10)
    {
      sh.getRange(row,11).setValue(Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "MM/dd/yyyy HH:mm:ss"));
    }
}

您可以使用它来设置可安装的触发器。只需添加SpreadsheetId。

function installOnEditTrigger()
{
  setupTrigger('onTimeStampEdit','SpreadsheetId');
}

function setupTrigger(funcName,SpreadsheetId)
{
  if(!isTrigger(funcName))
  {
    ScriptApp.newTrigger(funcName).forSpreadsheet(SpreadsheetId).onEdit().create();
  }
}

function isTrigger(funcName)
{
  var r=false;
  if(funcName)
  {
    var allTriggers=ScriptApp.getProjectTriggers();
    var allHandlers=[];
    for(var i=0;i<allTriggers.length;i++)
    {
      allHandlers.push(allTriggers[i].getHandlerFunction());
    }
    if(allHandlers.indexOf(funcName)>-1)
    {
      r=true;
    }
  }
  return r;
}