คอลัมน์อัปเดตอัตโนมัติใน Google Spreadsheet แสดงวันที่แก้ไขล่าสุด


37

กำลังพยายามหาวิธีที่จะมีการอัปเดตอัตโนมัติสองคอลัมน์เพื่อแสดงการประทับเวลาของการอัปเดตครั้งล่าสุด ฉันรู้ว่าหมอแสดงเวลาประทับของการแก้ไขครั้งล่าสุด แต่เรามีลูกค้าจำนวนมากที่เข้าถึงและปรับเอกสารในเวลาเดียวกัน ดังนั้นคำขอนี้ถูกใส่เข้ามาฉันจะยอมรับว่าฉันยังไม่ได้ทำการเข้ารหัสดังนั้นนี่จึงเกินกว่าฉัน

Myanda ได้โพสต์สิ่งที่ดูเหมือนตามเส้นทางที่ถูกต้อง แต่เราไม่แน่ใจว่าจะนำไปใช้อย่างไรสำหรับความต้องการของเรา:

การประทับเวลาของ Google Spreadsheet


มันจะช่วยถ้าคุณสามารถเชื่อมโยงเรากับเอกสารหรือให้เอกสารตัวอย่างของสิ่งที่คุณกำลังมองหา ฉันสามารถแก้ไขคำตอบอื่น ๆ ของฉันได้ แต่ฉันไม่แน่ใจว่าสิ่งที่คุณถาม คุณต้องการเพียงเซลล์เดียวที่อัปเดตด้วยการประทับเวลาที่แสดงเมื่อมีการอัปเดตสเปรดชีตทั้งหมดหรือไม่
OnenOnlyWalter

เฮ้ออน สิ่งที่เรากำลังมองหาคือในคอลัมน์ 2 แต่ละแถวจะอัปเดตด้วยการประทับเวลาทุกครั้งที่มีการอัปเดตเซลล์ใด ๆ ในแถวของตน ฉันไม่สามารถโพสต์เอกสารเพราะเป็นความลับโชคไม่ดี แต่มันมี 21 คอลัมน์และ 60 แถว สิ่งนี้ช่วยได้ไหม?
RichGonzalez

ได้รับมันให้ฉันดูที่รหัสเดิมของฉันและได้รับกลับมาให้คุณ :)
OnenOnlyWalter

ชื่นชอบ Onen มาก!
RichGonzalez

คำตอบ:


36

ตกลงนี่เป็นรหัสแก้ไขในคำตอบก่อนหน้าของฉัน:

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

สิ่งนี้จะจับแถวของเซลล์ใด ๆ ที่มีการเปลี่ยนแปลงและกำหนดเวลาให้กับคอลัมน์ที่สองของแถวนั้น

ในการดำเนินการทั้งหมดที่คุณต้องทำคือไปลงในสเปรดชีตและคลิกที่>Tools Script Editorในหน้าตัวแก้ไขผลลัพธ์ให้วางสิ่งนี้ลงในนั้น เนื่องจากนี่คือonEdit()ฟังก์ชั่นจึงควรใช้งานได้โดยไม่ต้องเพิ่มอะไรอีกในเซลล์ของสเปรดชีตของคุณเพียงแค่วางลงในเครื่องมือแก้ไขและบันทึก

สำหรับการประทับเวลาฉันตั้งค่ารูปแบบเป็น MM / dd / yy และปล่อยเวลา Utilities.formatDateหากคุณต้องการที่จะเปลี่ยนคุณก็สามารถเปลี่ยนการใช้งานของ


Onen มันใช้งานได้อย่างสมบูรณ์แบบ! ขอบคุณมาก!
RichGonzalez

1
ดีใจที่ได้ยิน! คุณสามารถทำเครื่องหมายคำตอบนี้ด้วยเครื่องหมายถูกแล้ว :) ฉันจะบอกว่ามันเป็นเพื่อให้คนอื่นรู้วิธีแก้ปัญหานี้ทำงานได้ แต่ก็เพราะฉันต้องการจุด: P
OnenOnlyWalter

จะทำ. มันได้ผลแน่นอน คำถามติดตามหนึ่งข้อ ไม่มีอะไรที่เป็นคำชม การเปลี่ยนเป็น PST ดูเหมือนจะไม่เปลี่ยนเป็นเวลามาตรฐานแปซิฟิก แต่ EST ใช้งานได้ java อ่าน PST เป็นตัวย่ออื่นหรือไม่ และมีวิธีที่จะแสดงเวลาเป็นเวลา 12 ชั่วโมงเทียบกับเวลาทางทหารหรือไม่?
RichGonzalez

1
การประทับเวลาไม่ทำงานสำหรับฉัน กับฉัน "20yy-MM-dd HH: mm" ทำงานแทน ฉันคิดว่า 'dd; จะต้องเป็นตัวพิมพ์เล็กหรือมันใช้งานไม่ได้ (เว้นแต่จะเป็นเดือนมกราคม
Riccardo

1
โปรดทราบว่าการใช้ "DD" สำหรับ.formatDate()จะทำให้คุณ "Day in year" - เช่น 365 สำหรับวันที่ 31 ธันวาคมคุณอาจต้องการ "dd" คุณสามารถดูรายการทั้งหมดของค่ารูปแบบวันที่ได้ที่นี่: docs.oracle.com/javase/7/docs/api/java/text/…
Dan Nguyen

8

FYI คำตอบที่ยอมรับใช้DDเป็นรูปแบบวันซึ่งจะทำให้คุณได้รับ "312" เช่นวันที่ 312 ของปี

ฉันใช้สิ่งนี้:

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

เพื่อรับสิ่งนี้:

2013-11-12, 03:43:20

1
ทำไมไม่แก้ไขคำตอบที่ยอมรับ?
alexkovelsky

ความคิดที่ดี: webapps.stackexchange.com/questions/37408/…
Dan Nguyen

4

ฉันหวังว่านี่จะโอเคที่จะใส่ที่นี่ ด้านล่างเป็นการแก้ไขฟังก์ชั่นด้านบน แต่ทำเพื่อเป็นแถว (แถวที่ 9) แทนที่จะเป็นคอลัมน์ การหาวิธีใช้การกำหนดคอลัมน์นั้นน่าหงุดหงิดมาก แต่จบลงด้วยความเรียบง่ายมาก ขอบคุณ OnenOnlyWalter สำหรับรหัสต้นฉบับ:


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

ดูเหมือนว่าจะทำงานได้ดีสำหรับฉัน ขอบคุณสำหรับการแก้ไขข้อผิดพลาดแถว 8 ของ @ OnenOnlyWalter
Zlatty

เนื่องจากนาฬิกาของผู้ใช้ไม่ถูกต้องมีวิธีมาตรฐานในการรับเวลาฝั่งเซิร์ฟเวอร์และแม่นยำหรือไม่
Sim

@Sim Google Apps Script ทำงานบนฝั่งเซิร์ฟเวอร์ เวลาที่คุณได้รับคือจากเซิร์ฟเวอร์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.