API Google Sheets - разворачивание или свертывание группы вызывает событие? - PullRequest
0 голосов
/ 20 декабря 2018

Я работаю над листом, в котором есть три отдельные группы строк, которые я не хочу, чтобы все были развернуты одновременно.Я хочу, чтобы только одна раскрывалась за раз, поэтому я пытаюсь написать сценарий, который свернет другие группы строк при развертывании одной.Мой план состоял в том, чтобы использовать простой триггер onEdit (e), чтобы свернуть другие строки, но при переключении группы событие, похоже, не вызывается.

Я ошибаюсь?Есть ли способ сделать это?Или вы можете предложить другой способ достижения моей цели?

1 Ответ

0 голосов
/ 20 декабря 2018

Установив функцию в качестве триггера OnChange, функция может быть запущена, когда происходит разворачивание и свертывание.В это время changeType объекта события равно OTHER.

Ссылка:

Редактировать:

К сожалению, объект события OnChange не содержит подробной информации, когда событие OnChange было инициировано.В качестве обходного пути, как насчет использования PropertiesService?В этом обходном пути он получает статус с помощью PropertiesService.

В качестве примера ситуации он предполагает следующее.

  • Строка 3-5 - это группа A
  • Строка 8-10 - это группа B
  • Строка 13-15 - это группа C

. Для описанной выше ситуации используется следующий сценарий.

Пример сценария:

function onChange(e) {
  var sheet = e.source.getActiveSheet(); // or you can also use SpreadsheetApp.getActiveSheet();
  if (sheet.getSheetName() === "Sheet1") { // If you want to control the sheet. Please put the sheet name here.
    var p = PropertiesService.getScriptProperties();
    var s = p.getProperties();
    var groupA = sheet.getRowGroup(3, 1);
    var groupB = sheet.getRowGroup(8, 1);
    var groupC = sheet.getRowGroup(13, 1);
    var gA = groupA.isCollapsed().toString() === s.groupA;
    var gB = groupB.isCollapsed().toString() === s.groupB;
    var gC = groupC.isCollapsed().toString() === s.groupC;
    if (gA && gB && gC) {
      return;
    } else if (!gA && gB && gC && !groupA.isCollapsed()) {
      groupB.collapse();
      groupC.collapse();
    } else if (gA && !gB && gC && !groupB.isCollapsed()) {
      groupA.collapse();
      groupC.collapse();
    } else if (gA && gB && !gC && !groupC.isCollapsed()) {
      groupA.collapse();
      groupB.collapse();
    }
    var currentStatus = {groupA: groupA.isCollapsed(), groupB: groupB.isCollapsed(), groupC: groupC.isCollapsed()};
    p.setProperties(currentStatus);
  }
  return;
}

Примечание:

  • Когда вы используете это, пожалуйста, скопируйте и вставьте этот скрипт и установите onChange() в качестве триггера OnCange.
  • Пожалуйста, установите имя вашего листа на "Sheet1" из if (sheet.getSheetName() === "Sheet1") {.
  • Этот скрипт работает следующим образом.
    • Когда группа А развернута, группа В и группа С свернуты.
    • Когда группа В развернута, группа А и группа С свернуты.
    • Когда группа С развернута, группа А и группа В свернуты.
    • Когда все группы свернуты, этому сценарию нечего делать.
  • Если выполняется быстрая операция развертывания и свертывания, может возникнуть ошибка ответа.

Ссылки:

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