如何在行“ Google文档”电子表格中自动设置“最近更新”单元格?


21

如何在Google文档电子表格行中自动设置“最近更新”单元格?

我想创建一列,单元格的值将自动设置为上次修改该行的时间。这可能吗?我该如何做/我使用什么选项来设置?

我看到了MS Excel解决方法,但我认为Google文档应该有类似的内容,对吧?(手指交叉)

我们有很多人在编辑一张大纸。我们可以看到修订历史记录,但是如果我们也有一列“最近更新”的日期,那就更好了。


你有没有尝试过?如果可行,请标记为此类,请参阅webapps.stackexchange.com/faq#howtoask
Jacob Jan Tuinstra 2013年

Answers:


20

您可以尝试添加Google Apps脚本来捕获单元格的编辑时间,并将时间戳记添加到其他单元格。这是以前的类似答案: Google Spreadsheet Timestamp?

function onEdit() {
 var s = SpreadsheetApp.getActiveSheet();
 if( s.getName() == "Sheet1" ) { //checks that we're on the correct sheet
   var r = s.getActiveCell();
   if( r.getColumn() == 13 ) { //checks the column
     var nextCell = r.offset(0, 1);
     if( nextCell.getValue() === '' ) //is empty?
       var time = new Date();
       time = Utilities.formatDate(time, "GMT", "HH:mm:ss");
       nextCell.setValue(time);
   };
 };
}

看起来不错,我会尝试一下
cwd 2012年


14

=iferror(A1+B1+C1+D1+J1+K1+L1+"x",today())只要该行中的单元格发生更改,公式就会重新计算。等式中带有“ x”的元素保证了错误。作为回报,返回日期。


5
这是一个有趣的克鲁格。
ale

1
我见过的最漂亮的解决方案:)
mafonya

5
据我所知,这实际上是行不通的。需要明确的是,它可以工作,但不会针对特定行进行更新。当我把它放进多行中,然后在工作表上的任何地方进行编辑时,所有行都将重新计算和更新。
nhgrif

1
哇!它为我工作。这是一个简化的版本:= iferror(SUM(A2:O2)+“ x”,today())并拖动它会自动更新行号。
伊利亚·伊夫多基莫夫

1

这是我的脚本,在此信息的最后一栏中输入:

  1. 插入到单元格中(在您要修改的行的最后一个单元格= lastcolumn中)-GMT -3中的日期,如果要将其放置在其他TZ中,只需为并发时区修改-3。如果要将日期自动放入默认的TZ,只需修改以下内容:

    var date = Utilities.formatDate(new Date(), "GMT-3", "dd/MM/yyyy HH:mm");
    to
    var date = Utilities.formatDate(new Date());
    
  2. 与修改它的单元格+用户一起插入评论。

  3. 更新某些内容时会显示一个弹出窗口。仅显示给ActiveUser。

    function onEdit(event)
    {
        var ss = SpreadsheetApp.getActiveSpreadsheet();
        var actSht = event.source.getActiveSheet();
        var actRng = event.source.getActiveRange();
    
        var index = actRng.getRowIndex();
        var dateCol = actSht.getLastColumn();
        var lastCell = actSht.getRange(index,dateCol);
        var date = Utilities.formatDate(new Date(), "GMT-3", "dd/MM/yyyy HH:mm");
    
        lastCell.setValue(date);
        lastCell.setComment("Ultima Modificacion: " + actRng.getA1Notation() +' por '+Session.getActiveUser());
        ss.toast('Ultima Modificacion = '+ actRng.getA1Notation()+' por '+Session.getActiveUser());
    }
    

1

我创建了一个函数,该函数在修改引用的单元格时会写入一个新的Date。在这种情况下,单元格的值为TRUE或FALSE,但是您可以将其编辑为任何值。

function WhenUpdated(cell1) {
  if(cell1){
    return new Date();
  }
  else return null;
}

1

这是一个使用标题查找列的版本,而不是对列号进行硬编码,并使用自定义时区:

function updateModified(options) {
  var sheet = SpreadsheetApp.getActiveSheet();
  if (options.sheetName && sheet.getName() != options.sheetName) {
    return;
  }

  var modifiedColumnName = options.modifiedColumnName || 'Modified';
  var header = sheet.getDataRange().offset(0, 0, 1).getValues()[0];
  var modifiedColumn;
  for (var i=0; i < header.length; i++) {
    if (header[i].trim() == modifiedColumnName) {
      modifiedColumn = i + 1;
      break;
    }
  }
  if (typeof modifiedColumn != 'number') {
    throw new Error("Can't find column with name: " + modifiedColumnName);
  }

  var activeCell = sheet.getActiveCell();
  if (activeCell.getColumn() == modifiedColumn) {
    return;
  }

  var modifiedCell = sheet.getRange(activeCell.getRow(), modifiedColumn);
  var formattedDate = Utilities.formatDate(new Date(), "America/Los_Angeles", "M/dd/yy HH:mm");
  modifiedCell.setValue(formattedDate);
}

function onEdit() {
  updateModified({sheetName: 'Jobs'});
}

要使用UTC,只需将时区更改为UTC。


-4

只需在一个单元格中键入“最新更新:”,然后在其旁边的单元格中键入“ = now()”!那应该做的!


1
这仅适用于每个单元,不适用于问题中所述的每一行
1owk3y 2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.