如何通过GS代码中的Google边栏传递HTML数据

时间:2018-08-28 11:06:02

标签: html google-apps-script google-sheets

我有一张工作表,它根据一组目标跟踪学生的进步-顶部的学生姓名,左侧列出的目标。每个学生都在一个组中-在下面的示例中,这些组由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)" />

最接近成功的是隐藏所有列,只要表单ID与传递给google.script.run的参数匹配即可。

1 个答案:

答案 0 :(得分:0)

  • 您只想显示具有用户输入值的列。而且您想隐藏除它们之外的其他列。
  • 用户输入的值位于“科学年组”工作表的第8行。

如果我对您的问题的理解是正确的,那么此修改如何?

修改点:

  • 如果在文本框中放入多个字符串(SK, NU,则if(data.getCell(8, i).getValue() != group){}始终为false。
  • 在文本框中输入name="groupName"的名称。使用它,它在GAS端使用group.groupName检索值。
    • 如果未提供名称,则可以使用group[""]检索值。
  • 我觉得在for循环中使用sheet.hideColumns(i)时,过程成本很高。因此,我根据您的情况使用了Sheets API。
    • 这样,每列的隐藏和显示都可以通过一个API调用来控制。
    • 首先,要使用Sheets API,请在Advanced Google Services和API控制台上启用Sheets API。您可以在here上查看有关如何启用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

在此示例中,该值使用google.script.run()发送到showGroup(filterGroups)

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

在此示例中,group.groupName检索了HTML表单中的值。

function showGroup(group) {
  Logger.log(group.groupName)
}