【问题标题】:How to create timestamp on multiple columns in GSheet如何在 GSheet 中的多个列上创建时间戳
【发布时间】:2021-07-12 04:24:35
【问题描述】:

我在创建脚本以在 GSheet 上自动设置时间戳时遇到了一些麻烦。我有 2 列 - AD 和 AE,我希望它具有更新列 L 和 AA 的日期时间戳。已尝试以下脚本,但似乎不起作用。

function onEdit(e) {

  addTimestamp(e);

}

function addTimestamp(e){

  var startRow = 3;
  var targetColumn = 12;
  var targetColumn2 = 27;
  var ws = "Brand List";

  var row = e.range.getRow();
  var col = e.range.getColumn();
  
  if (col === targetColumn && row >= startRow && e.source.getActiveSheet().getName() === ws) {

    var currentDate = new Date();
    e.source.getActiveSheet().getRange(row,30).setValue(currentDate)

  }

  if (col === targetColumn2 && row >= startRow && e.source.getActiveSheet().getName() === ws) {

    var currentDate = new Date();
    e.source.getActiveSheet().getRange(row,31).setValue(currentDate)

  }
}

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    您的脚本运行良好,但您似乎收到了一条错误消息:TypeError: Cannot read property 'range' of undefined

    发生这种情况是因为脚本在编辑电子表格时使用trigger 来执行函数onEdit()。 执行时,此触发器会将事件对象 (e) 作为参数传递给函数,其中包括已编辑的单元格等数据。

    但是,只有在编辑工作表时才会传递此事件对象,如果您从脚本编辑器运行该函数,则不会发生这种情况。 因此,要使其正常工作,您需要像使用脚本时一样编辑工作表。

    如果您真的想单独测试它,您需要显式创建此事件对象并将其传递给onEdit() 函数:How can I test a trigger function in GAS?

    【讨论】:

    • 谢谢,但我想要做的是列 AD 在 L 列被填充时具有时间戳,而 AE 列具有时间戳列 AA 被填充,你也能帮忙吗?
    • 我测试了你发布的脚本,它正在按照你说的做。你有没有从中得到任何错误?
    • 是的,它给出了一条错误消息“错误,TypeError:无法读取未定义的属性'范围'”
    • 如果您尝试从编辑器运行脚本会发生这种情况,因为触发器没有触发,所以您没有事件e。对于这样的脚本,您需要直接从电子表格中执行它们。
    • 这方面很新,您介意解释一下直接从电子表格执行是什么意思吗?即使在保存脚本之后,当我更新 L 或 AA 列时,也没有任何反应。
    【解决方案2】:

    对于那些对使用的脚本感兴趣的人。

       function onEdit(e) {
    
      addTimestamp(e);
      addTimestamp2(e);
    
    }
    
    function addTimestamp(e){
    
      var startRow = 3;
      var targetColumn = 12;
      var targetColumn2 = 27;
      var ws = "Brand List";
    
      var row = e.range.getRow();
      var col = e.range.getColumn();
    
    if (col === targetColumn && row >= startRow && e.source.getActiveSheet().getName() === ws) {
    
        var currentDate = new Date();
        e.source.getActiveSheet().getRange(row,30).setValue(currentDate)
    }
    }
    
    function addTimestamp2(e){
    
      var startRow = 3;
      var targetColumn = 12;
      var targetColumn2 = 27;
      var ws = "Brand List";
    
      var row = e.range.getRow();
      var col = e.range.getColumn();
    
    if (col === targetColumn2 && row >= startRow && e.source.getActiveSheet().getName() === ws) {
    
        var currentDate = new Date();
        e.source.getActiveSheet().getRange(row,31).setValue(currentDate)
    }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-25
      相关资源
      最近更新 更多