Как передать html-данные из боковой панели Google в переменную в gs-коде - PullRequest
0 голосов
/ 28 августа 2018

У меня есть лист, который отслеживает прогресс ученика в сравнении с набором целей - имя ученика вверху, цели перечислены внизу слева. Каждый ученик входит в группу - в приведенном ниже примере группы обозначены SK, IO и NU.

enter image description here

Я создал боковую панель с различными фильтрами.

enter image description here

У меня проблема с фильтром, когда пользователь вводит имя группы, при нажатии кнопки фильтра все столбцы будут скрыты, кроме столбцов, которые содержат введенное имя группы. У меня есть следующий код:

из листа .gs:

function showGroup(group) {
  for(var i=2; i<lastCol-36; i++) {
    if(data.getCell(8, i).getValue() != group) { 
    sheet.hideColumns(i);
    }
  }
} 

из HTML-листа:

<form id="filterGroups" >
   <input type="text" value="" id="groupName">
   <input type="button" value="Filter"
     onclick="google.script.run.showGroup(filterGroups)" />

Самое близкое к успеху - скрыть все столбцы, если идентификатор формы соответствует параметру, переданному в google.script.run.

1 Ответ

0 голосов
/ 30 августа 2018
  • Вы хотите отобразить только столбцы со значениями, введенными пользователем. И вы хотите скрыть другие столбцы, кроме них.
  • Введенные пользователем значения находятся в строке 8 таблицы «Группа научных лет».

Если я правильно понимаю ваш вопрос, как насчет этой модификации?

Очки модификации:

  • Если в текстовое поле помещено несколько строк (SK, NU), if(data.getCell(8, i).getValue() != group){} всегда ложно.
  • Дайте имя name="groupName" текстовому полю. Используя это, он получает значение, используя group.groupName на стороне ГАЗА.
    • Если имя не указано, вы можете получить значение, используя group[""].
  • Я чувствовал, что при использовании sheet.hideColumns(i) в цикле for стоимость процесса высока. Поэтому я использовал Sheets API для вашей ситуации.
    • Таким образом, скрытие и отображение каждого столбца можно контролировать одним вызовом API.
    • Во-первых, чтобы использовать Sheets API, включите Sheets API в Advanced Google Services и консоли API. О том, как включить Sheets API, можно узнать по здесь .

Модифицированные скрипты:

ГАЗ
function showGroup(group) {
  var unhide = group.groupName.split(",").map(function(e){return e.trim().toUpperCase()});
  var values = sheet.getRange(8, 2, 1, (lastCol - 36) - 2).getValues()[0];
  var template = {updateDimensionProperties:{properties:{},range:{sheetId:sheet.getSheetId(),dimension:"COLUMNS"},fields:"hiddenByUser"}};
  var r = values.map(function(e, i) {
    var t = JSON.parse(JSON.stringify(template));
    if (~unhide.indexOf(e)) {
      t.updateDimensionProperties.properties.hiddenByUser = false;
    } else {
      t.updateDimensionProperties.properties.hiddenByUser = true;
    }
    t.updateDimensionProperties.range.startIndex = i + 1;
    t.updateDimensionProperties.range.endIndex = i + 2;
    return t;
  });
  Sheets.Spreadsheets.batchUpdate({"requests": r}, ss.getId());
}
HTML
<form id="filterGroups" >
  <input type="text" value="" id="groupName" name="groupName">
  <input type="button" value="Filter" onclick="google.script.run.showGroup(filterGroups)">
</form>

Примечание:

  • В этом измененном сценарии, когда в текстовое поле помещается SK, NU, отображаются только столбцы с SK, NU. Другие столбцы скрыты.

Ссылка:

Если я неправильно понял ваш вопрос, пожалуйста, скажите мне. Я хотел бы изменить его.

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

О Can you show me how to pass html form data to GAS functions? вашего комментария, я покажу вам пример сценария, используя вашу HTML-форму. Форма HTML выглядит следующим образом.

HTML

В этом примере значение отправляется на showGroup(filterGroups) с использованием google.script.run().

<form id="filterGroups" >
  <input type="text" value="" id="groupName" name="groupName">
  <input type="button" value="Filter" onclick="google.script.run.showGroup(filterGroups)">
</form>
ГАЗ

В этом примере значение из формы HTML извлекается с помощью group.groupName.

function showGroup(group) {
  Logger.log(group.groupName)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...