Как я могу автоматически установить ячейку «последнее обновление» в строке Google Docs Spreadsheets?

21

Как я могу автоматически установить ячейку "последнее обновление" в строке Google Docs Spreadsheets?

Я хочу создать столбец, в котором значение ячеек будет автоматически установлено на момент последнего изменения этой строки. Это возможно? Как мне это сделать / какую опцию мне использовать, чтобы установить это?

Я вижу обходной путь для MS Excel, но думаю, что в Документах Google должно быть что-то похожее, верно? (скрещенные пальцы)

У нас есть несколько человек, редактирующих большой лист. Мы можем видеть историю изменений, но было бы лучше, если бы у нас был столбец «последних обновленных» дат.

УХО
источник
Ты пробовала? Если это работает, пожалуйста, пометьте как таковой, см. Webapps.stackexchange.com/faq#howtoask .
Джейкоб Ян Туинстра

Ответы:

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);
   };
 };
}
OnenOnlyWalter
источник
выглядит хорошо, я попробую
cwd
14

=iferror(A1+B1+C1+D1+J1+K1+L1+"x",today())всякий раз, когда ячейки в строке меняются, формула пересчитывается. с «х» в уравнении гарантирует ошибку. который в свою очередь возвращает дату.

Роберт
источник
5
Это интересный клуге.
Эль
1
Самое красивое решение, которое я когда-либо видел :)
mafonya
5
Насколько я могу судить, это на самом деле не работает. Чтобы было понятно, это работает, но не обновляется для определенных строк. Когда я вставляю это и перетаскиваю через несколько строк, а затем редактирую что угодно в любом месте листа, все строки пересчитываются и обновляются.
nhgrif
1
Вот это да! Это сработало для меня. Вот сокращенная версия: = iferror (SUM (A2: O2) + "x", today ()) и перетаскивание в нее автоматически обновляемых номеров строк.
Илья Евдокимов
1

Это мой скрипт, поместите в последний столбец эту информацию:

  1. Вставьте в ячейку (в последней ячейке = последний столбец для строки, которую вы изменяете) - Дата в 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());
    }
    
Matias
источник
1

Я создал функцию, которая записывает новую дату при изменении указанной ячейки. В этом случае значение ячейки 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 ()» в ячейку рядом с ней! Это должно сделать работу!

Ye Yaroo
источник
1
Это будет работать только на ячейку, а не на строку, как указано в вопросе
1owk3y