Bagaimana saya dapat secara otomatis mengatur sel "terakhir diperbarui" di baris Google Docs Spreadsheets?

21

Bagaimana saya dapat secara otomatis mengatur sel "terakhir diperbarui" di baris Google Docs Spreadsheets?

Saya ingin membuat kolom tempat nilai sel akan secara otomatis ditetapkan ketika baris terakhir diubah. Apakah ini mungkin? Bagaimana saya melakukan ini / opsi apa yang saya gunakan untuk mengatur ini?

Saya melihat solusi untuk MS Excel tetapi saya pikir Google Documents harus memiliki sesuatu yang serupa, bukan? (semoga saja)

Kami memiliki banyak orang yang mengedit lembaran besar. Kita dapat melihat riwayat revisi, tetapi akan lebih baik jika kita memiliki kolom tanggal "terakhir diperbarui" juga.

cwd
sumber
Sudahkah Anda mencoba? Jika berhasil, silakan tandai demikian, lihat webapps.stackexchange.com/faq#howtoask .
Jacob Jan Tuinstra

Jawaban:

20

Anda dapat mencoba menambahkan Skrip Google Apps untuk menangkap ketika sel diedit dan menambahkan cap waktu ke sel lain. Berikut jawaban sebelumnya yang serupa: Stempel Waktu Spreadsheet Google?

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
sumber
terlihat bagus saya akan mencobanya
cwd
14

=iferror(A1+B1+C1+D1+J1+K1+L1+"x",today())setiap kali sel di baris mengubah rumus menghitung ulang. dengan "x" dalam persamaan itu menjamin kesalahan. yang sebagai imbalannya, mengembalikan tanggal.

Robert
sumber
5
Itu sebuah kluge yang menarik.
ale
1
Solusi terindah yang pernah saya lihat :)
mafonya
5
Sejauh yang saya tahu, ini sebenarnya tidak berhasil. Agar jelas, ini berfungsi, tetapi tidak diperbarui untuk baris tertentu. Ketika saya memasukkan ini ke dalam dan menyeretnya melalui beberapa baris, lalu mengedit apa saja di mana saja pada lembar, semua baris dihitung ulang dan diperbarui.
nhgrif
1
Wow! Itu berhasil untuk saya. Ini adalah versi singkat: = iferror (SUM (A2: O2) + "x", today ()) dan menariknya secara otomatis memperbarui nomor baris.
Ilya Evdokimov
1

Ini skrip saya, taruh di kolom terakhir informasi ini:

  1. Masukkan ke dalam Sel (di sel terakhir = kolom terakhir untuk baris yang Anda modifikasi) - Tanggal dalam GMT -3, jika Anda ingin meletakkan yang sama di TZ lain cukup modifikasi -3 untuk Anda zona waktu bersamaan. Jika Anda ingin memasukkan tanggal secara otomatis di TZ default Anda, cukup modifikasi ini:

    var date = Utilities.formatDate(new Date(), "GMT-3", "dd/MM/yyyy HH:mm");
    to
    var date = Utilities.formatDate(new Date());
    
  2. Masukkan Komentar dengan Pengguna Sel + yang memodifikasinya.

  3. Muncul popup ketika Anda memperbarui sesuatu. Hanya muncul di 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
sumber
1

Saya telah membuat fungsi yang menulis Tanggal baru ketika sel yang direferensikan dimodifikasi. Dalam hal ini nilai sel BENAR atau SALAH, tetapi Anda dapat mengeditnya dengan nilai apa pun.

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

Berikut adalah versi yang menemukan kolom menggunakan tajuk, daripada melakukan hardcoding nomor kolom, dan menggunakan zona waktu khusus:

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'});
}

Untuk menggunakan UTC, cukup ubah zona waktu ke UTC.

Benjamin Atkin
sumber
-4

Cukup ketik "Pembaruan terakhir:" di satu sel dan ketik "= now ()" di sel di sebelahnya! Itu harus melakukan pekerjaan!

Ye Yaroo
sumber
1
Ini hanya akan bekerja per sel, bukan per baris seperti yang dinyatakan dalam pertanyaan
1owk3y