Стовпчик автоматичного оновлення в електронній таблиці Google, що показує дату останньої зміни


37

Намагаючись з’ясувати спосіб автоматичного оновлення стовпця два, щоб показати часову позначку останнього оновлення. Я розумію, що документ показує часову позначку останньої модифікації, але у нас є багато клієнтів, які одночасно звертаються до документа та коригують його. Тому цей запит був поданий. Я визнаю, що не робив кодування, тому це поза моїми помилками.

М'янда опублікував щось, що здавалося правильним шляхом, але ми не впевнені, як реалізувати це для наших потреб:

Часова позначка електронної таблиці Google?


Це допоможе, якщо ви можете зв’язати нас із документом або надати приклад документа того, що шукаєте. Я можу змінити свою іншу відповідь відповідно, але я не впевнений, що саме ви запитуєте. Вам просто потрібна одна клітинка, оновлювана часовою позначкою, яка показує, коли була оновлена ​​вся електронна таблиця?
OnenOnlyWalter

Гей Онене. Що ми шукаємо - це у стовпці 2 кожен рядок оновлюється часовою позначкою в будь-який час, коли будь-яка комірка у відповідному рядку оновлюється. Я, на жаль, не можу розмістити документ, оскільки це конфіденційно. Але він містить 21 стовпчик і 60 рядків. Чи допомагає це?
RichGonzalez

Зрозумів, дозвольте переглянути свій оригінальний код і повернутися до вас :)
OnenOnlyWalter

Дуже вдячний Онен!
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". Я думаю 'дд; це має бути малі, або це не працює (хіба що його січень, що було у випадку, коли це було написано, ахахахах).
Ріккардо

1
Зауважте, що за допомогою "DD" для .formatDate()ви отримаєте "День у році" - наприклад, 365 на 31 грудня. Ви, мабуть, хочете "ДД". Повний список значень формату дати ви можете переглянути тут: 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
чому б не виправити прийняту відповідь?
алельковельський


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

Це, здавалося, працює досить добре для мене. Дякуємо, що виправили помилку @ OnenOnlyWalter рядок 8.
Златті

Оскільки годинники користувачів можуть бути неточними, чи існує стандартний спосіб отримати точну часову позначку на стороні сервера?
Сім,

@Sim Google Apps Script працює на сервері. Час, який ви отримуєте, - від сервера.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.