Kolom pembaruan otomatis di Google Spreadsheet yang menunjukkan tanggal modifikasi terakhir

37

Mencoba mencari cara untuk membuat pembaruan dua kolom untuk menampilkan stempel waktu pembaruan terakhir. Saya menyadari bahwa dok menunjukkan cap waktu modifikasi terakhir, tetapi kami memiliki banyak klien yang mengakses dan menyesuaikan dokumen pada saat yang sama. Jadi permintaan ini dimasukkan. Saya akui saya belum melakukan pengkodean, jadi ini diluar saya.

Myanda telah memposting sesuatu yang sepertinya berada di jalur yang benar, tetapi kami tidak yakin bagaimana menerapkannya untuk kebutuhan kami:

Stempel Waktu Google Spreadsheet?

RichGonzalez
sumber
Akan membantu jika Anda dapat menautkan kami ke dokumen, atau memberikan contoh dokumen tentang apa yang Anda cari. Saya dapat mengubah jawaban saya yang lain sesuai, tetapi saya tidak yakin persis apa yang Anda tanyakan. Apakah Anda hanya perlu satu sel yang diperbarui dengan stempel waktu yang menunjukkan kapan seluruh spreadsheet diperbarui?
OnenOnlyWalter
Hai, Onen. Apa yang kami cari adalah, di kolom 2, setiap baris diperbarui dengan stempel waktu kapan pun sel di baris mereka diperbarui. Sayangnya saya tidak dapat memposting dokumen karena ini rahasia. Tapi itu berisi 21 kolom dan 60 baris. Apakah ini membantu?
RichGonzalez
Mengerti, biarkan saya melihat kode asli saya dan kembali kepada Anda :)
OnenOnlyWalter
Sangat menghargai Onen!
RichGonzalez

Jawaban:

36

Oke, ini versi modifikasi kode di jawaban saya sebelumnya:

function onEdit(e) {
  // Your sheet params
  var sheetName = "MySheet";
  var dateModifiedColumnIndex = 2;
  var dateModifiedColumnLetter = 'B';

  var range = e.range; // range just edited
  var sheet = range.getSheet();
  if (sheet.getName() !== sheetName) {
    return;
  }

  // If the column isn't our modified date column
  if (range.getColumn() != dateModifiedColumnIndex) { 
    var row = range.getRow();
    var time = new Date();
    time = Utilities.formatDate(time, "GMT-08:00", "MM/dd/yy, hh:mm:ss");
    var dateModifiedRange = sheet.getRange(dateModifiedColumnLetter + row.toString());
    dateModifiedRange.setValue(time);
  };
 };

Apa yang dilakukan adalah meraih baris sel apa pun yang diubah dan memberikan stempel waktu ke kolom kedua dari baris tertentu.

Untuk menerapkan, yang perlu Anda lakukan adalah masuk ke spreadsheet dan klik Tools> Script Editor. Di halaman editor yang dihasilkan, cukup tempel ini di sana. Karena ini adalah onEdit()fungsi, itu harus berfungsi tanpa harus menambahkan apa pun ke sel spreadsheet Anda, cukup tempel ke editor dan simpan.

Untuk cap waktu, saya mengatur format ke MM / hh / tttt dan meninggalkan waktu. Jika Anda ingin mengubahnya, Anda bisa mengubah penggunaan Utilities.formatDate.

OnenOnlyWalter
sumber
Onen, ini bekerja dengan sempurna! Terima kasih banyak!
RichGonzalez
1
Senang mendengarnya! Dapatkah Anda menandai jawaban ini dengan tanda centang kemudian :) Saya akan mengatakan bahwa itu adalah agar orang lain dapat mengetahui solusi ini berfungsi, tetapi itu juga karena saya ingin poinnya: P
OnenOnlyWalter
Akan melakukan. Ini pasti berhasil. Satu pertanyaan lanjutan. Tidak ada yang dipuji. Mengubah ke PST tampaknya tidak mengubahnya ke waktu Pacific Standard, tetapi EST berfungsi. Apakah java membaca PST sebagai singkatan yang berbeda. Dan apakah ada cara untuk menampilkan waktu sebagai waktu 12 jam vs waktu militer?
RichGonzalez
1
cap waktu tidak bekerja untuk saya. Dengan saya "20yy-MM-dd HH: mm" bekerja sebagai gantinya. Saya pikir; harus huruf kecil atau tidak berfungsi (kecuali bulan Januari yang merupakan kasus ketika ini ditulis, ahahahah).
Riccardo
1
Perhatikan bahwa menggunakan "DD" untuk .formatDate()akan memberi Anda "Hari dalam tahun" - mis. 365 untuk 31 Desember. Anda mungkin menginginkan "dd". Anda dapat melihat daftar lengkap nilai format tanggal di sini: docs.oracle.com/javase/7/docs/api/java/text/…
Dan Nguyen
8

FYI, jawaban yang diterima digunakan DDsebagai format hari, yang akan memberi Anda sesuatu seperti "312", yaitu hari ke-312 dalam setahun.

Saya menggunakan ini:

"yyyy-MM-dd, hh:mm:ss"

untuk mendapatkan ini:

2013-11-12, 03:43:20
Dan Nguyen
sumber
1
mengapa tidak memperbaiki jawaban yang diterima?
alexkovelsky
4

Saya harap ini tidak masalah untuk diletakkan di sini. Di bawah ini adalah modifikasi dari fungsi di atas tetapi untuk melakukannya untuk baris (baris 9) daripada kolom. Mencari tahu bagaimana menggunakan tugas kolom itu sangat membuat frustasi tetapi akhirnya menjadi sangat sederhana. Terima kasih kepada OnenOnlyWalter untuk kode aslinya:


function onEdit() { 
    var s = SpreadsheetApp.getActiveSheet(); // Get spreadsheet name 
    var r = s.getActiveCell(); // store active cell name in current spreadsheet 
  var cell1 = 9 // This is the row I want to put values
  if(r.getRow() != cell1) { // Ignores this row (where I put the dates)
    var column = r.getColumn();  // Get column # from active cell
    var time = new Date(); // Get date and time of last mod
    time = Utilities.formatDate(time, "GMT-08:00", "MM/DD/yy, hh:mm:ss"); // Format date and time
    SpreadsheetApp.getActiveSheet().getRange(cell1,column).setValue(time); // put in time in cell
  };
 };
pengguna2023699
sumber
Ini sepertinya bekerja cukup baik untuk saya. Terima kasih telah memperbaiki kesalahan baris 8 @ OnenOnlyWalter.
Zlatty
Karena jam pengguna bisa tidak akurat, apakah ada cara standar untuk mendapatkan cap waktu yang akurat di sisi server?
Sim
@Sim Google Apps Script menjalankan sisi server. Waktu yang Anda dapatkan adalah dari server.