Автообновление столбца в электронной таблице Google с указанием даты последнего изменения

37

Попытка найти способ автоматического обновления столбца 2 для отображения метки времени последнего обновления. Я понимаю, что документ показывает временную метку последней модификации, но у нас есть много клиентов, которые обращаются к документу и настраивают его одновременно. Таким образом, этот запрос был вставлен. Я признаю, что я не закончил кодирование, так что это за мной.

Myanda опубликовала что-то, что казалось правильным путем, но мы не уверены, как реализовать это для наших нужд:

Временная метка таблицы Google?

RichGonzalez
источник
Было бы полезно, если бы вы могли связать нас с документом или предоставить пример документа, который вы ищете. Я могу изменить свой другой ответ соответственно, но я не уверен точно, что вы спрашиваете. Вам просто нужно обновить одну ячейку с отметкой времени, которая показывает, когда была обновлена ​​вся электронная таблица?
OnenOnlyWalter
Привет, Онен. Что мы ищем, так это то, что в столбце 2 каждая строка обновляется с отметкой времени каждый раз, когда обновляется любая ячейка в соответствующей строке. Я не могу опубликовать документ, потому что это, к сожалению, конфиденциально. Но он содержит 21 столбец и 60 строк. Это помогает?
РичГонсалес
Понял, позвольте мне взглянуть на мой оригинальный код и вернуться к вам :)
OnenOnlyWalter
Очень ценится Онен!
РичГонсалес

Ответы:

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.

OnenOnlyWalter
источник
Onen, это работает отлично! Спасибо большое!
РичГонсалес
1
Рад слышать это! Можете ли вы пометить этот ответ галочкой тогда :) Я бы сказал, что это было так, чтобы другие люди могли знать, что это решение работает, но это также потому, что я хотел бы получить очки: P
OnenOnlyWalter
Сделаю. Это определенно работает. Один дополнительный вопрос. Ничто так не похвалилось. Переход на PST не меняет его на тихоокеанское стандартное время, но EST работает. Ява читает PST как другую аббревиатуру. И есть ли способ отобразить время как 12 часов против военного времени?
РичГонсалес
1
временная метка не работает для меня. У меня вместо этого работает "20yy-MM-dd HH: mm". Я думаю, дд; должен быть в нижнем регистре, или он не работает (если только его январь, который был в случае, когда это было написано, ахахахах).
Риккардо
1
Обратите внимание, что при использовании «DD» .formatDate()вы получите «День в году» - например, 365 для 31 декабря. Возможно, вы хотите «dd». Вы можете увидеть полный список значений формата даты здесь: docs.oracle.com/javase/7/docs/api/java/text/…
Дэн Нгуен,
8

К вашему сведению, принятый ответ использует DDв качестве формата дня, который даст вам что-то вроде «312», то есть 312-й день года.

Я использовал это:

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

чтобы получить это:

2013-11-12, 03:43:20
Дэн Нгуен
источник
1
почему не исправить принятый ответ?
Алексковельский
хорошая идея: webapps.stackexchange.com/questions/37408/…
Дэн Нгуен
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
  };
 };
user2023699
источник
Казалось, это работает очень хорошо для меня. Спасибо за исправление ошибки 8-й строки @ OnenOnlyWalter.
Златты
Поскольку пользовательские часы могут быть неточными, существует ли стандартный способ получить точную временную метку на стороне сервера?
Сим
@Sim Google Apps Script работает на стороне сервера. Время, которое вы получаете от сервера.