Как проверить, активно ли пользователь редактирует ячейку - PullRequest
1 голос
/ 02 мая 2019

У меня есть очень простой сценарий, который запускается каждые 15 минут, чтобы повторно алфавитировать лист на основе даты этого дня. Работает отлично, кроме одного вопроса. Лист используют около 8-10 пользователей в любой момент времени. Если пользователь активно печатает в ячейке, когда функция запускается и лист восстанавливается, тогда, когда он заканчивает вводить ячейку, он отредактировал неправильную ячейку. Например, если они начинают редактировать ячейку D24, а затем после ее восстановления эта строка становится D28, то, когда они нажимают Enter, они перезаписывают новый D24.

Можно ли как-нибудь включить что-то в код, чтобы проверить, есть ли какие-либо ячейки, которые активно редактируются (выделены серым цветом, потому что внутри кто-то есть)? Или какое-то другое решение, которое решило бы эту проблему?

function Alphabetize() {

var spreadsheet = SpreadsheetApp.getActive()
var now = new Date();
  var name = Utilities.formatDate(now,"EST","MM-dd")
  var day = now.getDay()

  var sheet = spreadsheet.getSheetByName(name)
  var col = sheet.getLastColumn()
  var row = sheet.getLastRow()

  var range = sheet.getRange(3, 1, row, col)

 range.sort({column: 1, ascending: true})


}

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

Так как модалы не работают в этой ситуации (триггеры, основанные на времени и другие пользователи), я нашел немного неуклюжую работу вокруг.Я добавил строку в верхней части листа в замороженном разделе, которая ярко-желтого цвета, и говорит: «Нажмите Enter. Лист собирается пересортировать».несколько раз, так что это видно по всему листу.Затем я спрятал эту строку и вставил этот код прямо перед сортировкой:

sheet.showRows(2)
Utilities.sleep(10000)

Таким образом, он показывает эту строку, ждет в течение 10 секунд, сортирует и затем снова скрывает строку с помощью sheet.hideRows(2).Элегантно, это не так.Но он работает на триггере времени, и каждый пользователь видит это.Если есть более элегантное решение, я весь слух.

0 голосов
/ 02 мая 2019

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

Я думаю, что это могло бы быть возможно при использовании расширения веб-браузера, которое считывает DOM электронной таблицы, но оно не будет очень надежным, поскольку источник веб-страниц многих приложений Google генерируется автоматически, и все может измениться без предварительного уведомления.

С одной стороны, состояние, определяемое расширением веб-браузера, должно быть сохранено в хранилище документов / сценариев с помощью службы свойств или службы кэша, чтобы управляемый по времени триггер мог прочитать состояние, а с другой - время - управляемый триггер сохранить флаг, чтобы предупредить пользователя, использующего те же сервисы, чтобы веб-браузер мог их прочитать.

ПРИМЕЧАНИЕ. Чтобы это работало, веб-браузер должен вызывать функции из того же проекта, что и функции, запускаемые триггером времени.

Используя Google Apps Script, вы можете использовать spreadsheet.toast (...) для отображения моделей и не слишком навязчивых предупреждений, а затем использовать модальное диалоговое окно для прерывания пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...