使用GO_TO_PAGE在App脚本中创建Google表单

时间:2017-09-29 12:45:37

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

我有一张包含一组组名的表,以及他们需要报告他们做过或不做过的事情。我在创建一个脚本时会遇到问题,该脚本会让名称列产生一个多项选择问题并根据答案指向正确的下一页。

Names       Option1       Option2       Option 3       Option4
Frank       Something1    Something2    Something3
Hank        AnotherThing  AnotherThing1 AnotherThing3  Anotherthing4
Bob         Foo           Bar

第一个问题是多选,第1列带有答案。 根据答案,我需要将其指向一个新的部分,其他列的内容与所选答案位于同一行。 选择Frank并提交以通过3个选项发送到Checkbox问题。

任何人都对如何做到这一点最微弱?我可以手动提出问题但是当谈到指导GO_TO_PAGE部分时,我无法让它工作。 提前谢谢!

1 个答案:

答案 0 :(得分:0)

这是解决问题的可能方法。我正在使用侧边栏,如果你想让它变得更宽,最终可能成为一个webapp,就可以轻松地成为一个对话框。

查看对话框或侧边栏,您会看到从电子表格中获得名称的下拉列表,当您选择名称并单击GetToDoList时,您将获得一个待办事项列表您的电子表格以及包含我已在电子表格中包含的不同表单的链接的按钮。

我希望这会有所帮助。

Code.gs:

function getNames()
{
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('ToDoList');
  var rg=sh.getDataRange();
  var vA=rg.getValues();
  var names=['Select Name'];
  for(var i=1;i<vA.length;i++)
  {
    names.push(vA[i][0]);
    Logger.log('%s',vA[i][0]);
  }
   return names;
}

function loadToDoSideBar()
{
  var userInterface=HtmlService.createHtmlOutputFromFile('todolist').setTitle('ToDoLists');
  SpreadsheetApp.getUi().showSidebar(userInterface);
}

function getToDoList(name)
{
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('ToDoList');
  var rg=sh.getDataRange();
  var vA=rg.getValues();
  var hl='';
  for(var i=0;i<vA.length;i++)
  {
    if(vA[i][0]==name)
    {
      for(var j=1;j<vA[i].length;j+=2)
      {
        if(vA[i][j] && vA[i][j+1])
        {
          hl+=Utilities.formatString('<br /><label>%s<input class="btn1" type="button" value="%s" onClick="goToSheet(\'%s\')" /></label>',vA[i][j],'Go to' + vA[i][j+1],vA[i][j+1]);
        }
      }
    }
  }
  return hl;
}

function goToSheet(name)
{
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName(name).activate();
}

todolist.html

<!DOCTYPE html>
<html>
  <head>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
  <script>
    $(function() {
        $('#txt1').val('');
        google.script.run
          .withSuccessHandler(updateSelect)
          .getNames();
      });
    function updateSelect(vA)
    {
      var select = document.getElementById("sel1");
      select.options.length = 0; 
      for(var i=0;i<vA.length;i++)
      {
        select.options[i] = new Option(vA[i],vA[i]);
      }
    }
    function getToDoList()
    {
      var name=$('#sel1').val();
      google.script.run
        .withSuccessHandler(updateToDoList)
        .getToDoList(name)
    }
    function updateToDoList(hl)
    {
      document.getElementById('viewlist').innerHTML=hl;
    }
    function goToSheet(name)
    {
      google.script.run.goToSheet(name);
    }
    console.log('My Code');  
  </script>
  <style>
  div.scroll{background-color: #ffffff;width: 250px;height:100%;display:block;margin:0 0 0 5px;padding:0 0 0 10px;}
  #sel1 option{width:250px;}
  .type{color:#ff0000;font-weight:500;}
  .date{color:#080b58;font-weight:500;}
  .note{font-weight:500;}
  .btn1{margin:10px 10px 10px 10px;vertical-align:25%;}
  body{margin:5px 5px 5px 10px;width:275px;}
  </style>
  </head>
  <body>
    <select id="sel1" style="width:125px;height:35px;margin:10px 0 10px 0;">
      <option value="" selected></option>
   </select>
   <input type="button" value="GetToDoList" onClick="getToDoList()" />
   <br /><div id="viewlist" class="scroll"></div>
  </body>
</html>

这是我对您的数据所做的事情。我刚刚在Locations或Links的每个值之间添加了另一列(不确定你想要什么)。但是代码向您展示了如何将不同表单的链接合并到解决方案中。

enter image description here

这就是对话框的样子:

enter image description here