Cột tự động cập nhật trong Bảng tính Google hiển thị ngày sửa đổi lần cuối


37

Cố gắng tìm ra cách để có hai bản cập nhật tự động để hiển thị dấu thời gian của bản cập nhật cuối cùng. Tôi nhận ra tài liệu hiển thị dấu thời gian của lần sửa đổi cuối cùng, nhưng chúng tôi có rất nhiều khách hàng truy cập và điều chỉnh tài liệu cùng một lúc. Vì vậy, yêu cầu này đã được đưa vào. Tôi thừa nhận tôi đã không thực hiện mã hóa, vì vậy điều này nằm ngoài tôi.

Myanda đã đăng một cái gì đó dường như dọc theo con đường đúng, nhưng chúng tôi không chắc chắn làm thế nào để thực hiện nó cho nhu cầu của chúng tôi:

Dấu thời gian bảng tính Google?


Sẽ hữu ích nếu bạn có thể liên kết chúng tôi với tài liệu hoặc cung cấp tài liệu mẫu về những gì bạn đang tìm kiếm. Tôi có thể sửa đổi câu trả lời khác của mình cho phù hợp, nhưng tôi không chắc chính xác những gì bạn đang hỏi. Bạn có cần một ô duy nhất được cập nhật với dấu thời gian hiển thị khi toàn bộ bảng tính được cập nhật không?
OnenOnlyWalter

Này Onen. Những gì chúng tôi đang tìm kiếm là, trong cột 2, mỗi hàng cập nhật với dấu thời gian bất cứ lúc nào bất kỳ ô nào trong hàng tương ứng của chúng đều được cập nhật. Tôi không thể đăng tài liệu vì nó không may là bí mật. Nhưng nó chứa 21 cột và 60 hàng. Không giúp đỡ à?
RichGonzalez

Hiểu rồi, hãy để tôi xem mã gốc của tôi và lấy lại cho bạn :)
OnenOnlyWalter

Onen đánh giá cao!
RichGonzalez

Câu trả lời:


36

Ok, đây là một phiên bản sửa đổi của mã trong câu trả lời trước của tôi:

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

Điều này làm là lấy hàng của bất kỳ ô nào được thay đổi và gán dấu thời gian cho cột thứ hai của hàng cụ thể đó.

Để thực hiện, tất cả những gì bạn cần làm là vào bảng tính và nhấp vào Tools> Script Editor. Trong trang biên tập kết quả, chỉ cần dán này vào đó. Vì đây là một onEdit()chức năng, nó sẽ hoạt động mà không cần phải thêm bất cứ thứ gì khác vào các ô của bảng tính của bạn, chỉ cần dán nó vào trình chỉnh sửa và lưu nó.

Đối với dấu thời gian, tôi đặt định dạng thành MM / dd / yy và để lại thời gian. Nếu bạn muốn thay đổi nó, bạn chỉ có thể thay đổi việc sử dụng Utilities.formatDate.


Onen, điều này hoạt động hoàn hảo! Cảm ơn bạn rất nhiều!
RichGonzalez

1
Vui mừng khi nghe nó! Bạn có thể đánh dấu câu trả lời này với một dấu kiểm rồi :) Tôi có thể nói rằng đó là để người khác có thể biết giải pháp này hoạt động, nhưng nó cũng vì tôi muốn các điểm: P
OnenOnlyWalter

Sẽ làm. Nó chắc chắn hoạt động. Một câu hỏi tiếp theo. Không có gì như khen. Thay đổi sang PST dường như không thay đổi nó thành giờ chuẩn Thái Bình Dương, nhưng EST hoạt động. Có java đọc PST như một từ viết tắt khác nhau. Và có cách nào để hiển thị thời gian là 12 giờ so với giờ quân sự không?
RichGonzalez

1
dấu thời gian không làm việc cho tôi. Thay vào đó, với tôi "20yy-MM-dd HH: mm" hoạt động. Tôi nghĩ 'dd; phải viết thường hoặc nó không hoạt động (trừ khi tháng giêng là trường hợp khi nó được viết, ahahahah).
Riccardo

1
Lưu ý rằng việc sử dụng "DD" cho .formatDate()sẽ giúp bạn có "Ngày trong năm" - ví dụ: 365 cho ngày 31 tháng 12. Bạn có thể muốn "dd". Bạn có thể xem danh sách đầy đủ các giá trị định dạng ngày tại đây: docs.oracle.com/javase/7/docs/api/java/text/ Kẻ
Dan Nguyen

8

FYI, câu trả lời được chấp nhận sử dụng DDnhư định dạng ngày, sẽ mang lại cho bạn một cái gì đó như "312", tức là ngày thứ 312 trong năm.

Tôi đã sử dụng điều này:

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

để có được điều này:

2013-11-12, 03:43:20

1
Tại sao không sửa câu trả lời được chấp nhận?
alexkovelsky


4

Tôi hy vọng điều này là OK để đặt ở đây. Dưới đây là một sửa đổi của chức năng trên nhưng để thực hiện nó cho một hàng (hàng 9) chứ không phải là cột. Tìm ra cách sử dụng bài tập cột rất bực bội nhưng cuối cùng lại cực kỳ đơn giản. Cảm ơn OnenOnlyWalter cho mã gốc:


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

Điều này dường như làm việc khá tốt cho tôi. Cảm ơn bạn đã sửa lỗi hàng 8 của @ OnenOnlyWalter.
Zlatty

Vì đồng hồ người dùng có thể không chính xác, có cách nào để lấy dấu thời gian chính xác của máy chủ không?
Sim

@Sim Google Apps Script chạy phía máy chủ. Thời gian bạn nhận được là từ máy chủ.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.