ฉันจะตั้งค่าเซลล์ "อัปเดตล่าสุด" ในแถวสเปรดชีตของ Google เอกสารได้อย่างไร


21

ฉันจะตั้งค่าเซลล์ "ปรับปรุงล่าสุด" โดยอัตโนมัติในแถวสเปรดชีตของ Google เอกสารได้อย่างไร

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

ฉันเห็นวิธีแก้ปัญหาสำหรับ MS Excelแต่ฉันคิดว่า Google เอกสารควรมีสิ่งที่คล้ายกันใช่ไหม (ไขว้นิ้วเอาไว้)

เรามีคนหลายคนกำลังแก้ไขแผ่นงานขนาดใหญ่ เราสามารถดูประวัติการแก้ไขได้ แต่จะดีกว่าถ้าเรามีคอลัมน์ของวันที่ "ปรับปรุงล่าสุด" ด้วยเช่นกัน


คุณเคยลองไหม ถ้ามันทำงานแล้วโปรดทำเครื่องหมายดังกล่าวดูwebapps.stackexchange.com/faq#howtoask
จาค็อบ ม.ค. Tuinstra

คำตอบ:


20

คุณสามารถลองเพิ่ม Google Apps Script เพื่อจับภาพเมื่อมีการแก้ไขเซลล์และเพิ่มการประทับเวลาไปยังเซลล์อื่น ต่อไปนี้เป็นคำตอบก่อนหน้านี้ที่คล้ายกัน: Timestamp ของ Google Spreadsheet

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

ดูดีฉันจะลองดู
cwd


14

=iferror(A1+B1+C1+D1+J1+K1+L1+"x",today())เมื่อใดก็ตามที่เซลล์ในแถวเปลี่ยนสูตรจะคำนวณซ้ำ ด้วย "x" ในสมการมันรับประกันข้อผิดพลาด ซึ่งผลตอบแทนคืนวันที่


5
นั่นคือกลิ่นอายที่น่าสนใจ
เบียร์

1
วิธีการแก้ปัญหาที่สวยที่สุดที่ฉันเคยเห็น :)
mafonya

5
เท่าที่ฉันสามารถบอกได้ว่านี่ไม่ได้ผลจริง เพื่อให้ชัดเจนใช้งานได้ แต่ไม่ได้รับการอัพเดตสำหรับแถวที่เฉพาะเจาะจง เมื่อฉันใส่สิ่งนี้ลงไปและลากผ่านหลายแถวจากนั้นแก้ไขอะไรก็ได้บนแผ่นงานแถวทั้งหมดจะถูกคำนวณใหม่และอัปเดต
nhgrif

1
ว้าว! มันใช้งานได้สำหรับฉัน นี่คือเวอร์ชันย่อ: = iferror (SUM (A2: O2) + "x", วันนี้ ()) และลากไปยังหมายเลขแถวที่อัปเดตโดยอัตโนมัติ
Ilya Evdokimov

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

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

เพียงพิมพ์ "Last updated:" ในเซลล์เดียวแล้วพิมพ์ "= now ()" ในเซลล์ถัดจากเซลล์! นั่นควรจะทำงาน!


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