【问题标题】:Multiple timestamps in same google sheet across multiple tabs跨多个标签的同一个谷歌表中的多个时间戳
【发布时间】:2018-02-17 17:34:53
【问题描述】:

您好,我正在尝试让我的电子表格在此电子表格的不同选项卡中包含多个时间戳。每当在 J 列中编辑数据时,我都希望在 K 列中立即填充一个时间戳。我在 1 个 Google 工作表中有 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);
  }
}

【问题讨论】:

    标签: google-sheets tabs timestamp


    【解决方案1】:

    给你。设置 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;
    }
    

    【讨论】:

    • 我已经替换了 var ss=e.source;使用 ss=SpreadsheetApp.getActiveSpreadsheet();但现在它给了我一个错误无法读取属性范围
    • 这里是具有编辑权限的工作表的链接。谢谢。 docs.google.com/spreadsheets/d/…
    • 您不能在手动模式下运行这些函数,它们需要从触发器运行。
    • 问题是我在那里也有 e.range 并且它们都需要一个事件对象,这意味着你必须从触发器运行它们。除了安装编辑触发器的一些额外内容之外,我还为您提供了代码。
    猜你喜欢
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2011-06-12
    相关资源
    最近更新 更多