Редактировать историю в Google Sheet

#javascript #google-apps-script #google-sheets

#javascript #google-приложения-скрипт #google-sheets

Вопрос:

Этот код обновляет только последнее редактирование ячейки (пользователь, дата и время) и вставляет в качестве примечания onEdit

 function onEdit(e) {
 var email = Session.getActiveUser().getEmail();
  var curDate = Utilities.formatDate(new Date(), "GMT 05:30", "EEEE dd-MMM-yyyy ● hh:mm a")
  if (e.range.columnStart === 5 amp;amp; e.source.getActiveSheet().getName() == 'ARTWORK') {// Column 12 is Column L
    //Set a comment on the edited cell to indicate when it was changed.
    e.range.setNote('Updated by - '  email  'nnDate amp; Timen'   curDate);
  };
}
  

Но мое требование в том, можем ли мы добавить историю редактирования в ячейку в качестве примечания?

например,
ОТРЕДАКТИРОВАНО NYK 11 сентября 2020 года в 11:20 утра
ОТРЕДАКТИРОВАНО XYZ 12 сентября 2020 года в 12:20 вечера
ОТРЕДАКТИРОВАНО ABC 15 сентября 2020 года в 15:01 вечера

Возможно ли это?

Ответ №1:

Объяснение:

  • Вы можете получить текущие примечания к ячейке и добавить новое примечание при редактировании этой конкретной ячейки.

  • Для выполнения этой задачи вы можете использовать getNote() для получения текущих заметок выбранной ячейки, а затем использовать setNote() для обновления заметок, добавив дополнительную заметку к существующим:

     var current_notes = e.range.getNote();
    e.range.setNote(`${current_notes}nn Updated by -  ${email} nDate amp; Timen  ${curDate}`);
      
  • Поскольку последнее строковое выражение включает в себя множество переменных, оно
    предпочтительнее вместо этого использовать шаблонные литералы.


Решение:

 function onEdit(e) {
 var email = Session.getActiveUser().getEmail();
  var curDate = Utilities.formatDate(new Date(), "GMT 05:30", "EEEE dd-MMM-yyyy ● hh:mm a")
  if (e.range.columnStart === 5 amp;amp; e.source.getActiveSheet().getName() == 'ARTWORK' amp;amp; e.range.getValue() !="") {// Column 12 is Column L
    var current_notes = e.range.getNote();
    e.range.setNote(`${current_notes}nn Updated by -  ${email} nDate amp; Timen  ${curDate}`);  
    SpreadsheetApp.flush();
  };
}
  

Иллюстрация:

пример


Соответствующая информация:

Редактировать историю ячейки — это новая функция, недавно представленная Google. На данный момент нет способа использовать Google Apps Script для получения истории редактирования ячейки. Об этой функции уже сообщалось для реализации в IssueTracker. Вы можете нажать на кнопку «Звезда» в левом верхнем углу экрана, чтобы увеличить шансы на то, что эта функция будет реализована Google в будущем.

Комментарии:

1. Это почти сделано, но при первом редактировании он устанавливает 2 заметки (в первой заметке пользователь не упоминается), а при втором редактировании добавляет еще 2 заметки и продолжает повторяться, это может запутать зрителей и затруднить понимание происходящего. Есть ли какой-нибудь способ это исправить?

2. @MuhammedAadhil хм, я не уверен, понимаю ли я. Вам нужна история изменений в s cell. Это означает, что вы сохраняете старую заметку и добавляете поверх нее. Таким образом, каждый раз, когда редактируется ячейка, обновление редактирования будет сохранено в виде заметки поверх текущих заметок в ячейке. Не могли бы вы уточнить, пожалуйста, подробнее?

3. @MuhammedAadhil или вы имеете в виду, что хотите очистить заметку только при первом запуске скрипта? А именно, очистите заметки, которые у вас есть в вашем листе прямо сейчас. Это то, что вы хотите?

4. Я должен получить 1 заметку за 1 правку и 2 заметки за 2 правки и 3 заметки за 3 правки, но я получаю 2 заметки за 1 правку, а иногда и с дублирующейся меткой времени.

5. Я думаю, вы получаете это, потому что примечания к ячейке будут обновляться каждый раз, когда вы редактируете ячейку. Это включает в себя удаление содержимого ячейки или замену его непосредственно другим значением. Вы хотите, чтобы примечания обновлялись только тогда, когда ячейка обновляется другим (непустым) значением? Дайте мне знать, и я изменю код. @MuhammedAadhil