从自定义html对话框中获取数据

时间:2016-06-02 06:33:20

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

我没有太多使用googlescript所以希望这是一个简单的问题。但是我无法在搜索中找到答案。

我想要一个脚本,在我的Google工作表中添加一个新按钮,打开一个带复选框的对话框,并以某种方式返回勾选的方框。

编辑:目标是显示一个消息框,列出其他工作表的名称并带有复选框,并返回包含所选名称的列表。

现在,createGraph(代理)中记录的值为NULL,因此HTML脚本中的某些内容似乎不正确。

这是我更新的脚本(编辑:删除不必要的部分):

function openMsgBox() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var pages = ss.getSheets();
  var names = [];
  for(var i = 0; i < pages.length; i++){
    var name = pages[i].getName();
    if(name != 'Template'){
     names.push(name); 
    }
  }

  if(names.length == 0){
    Browser.msgBox('Error', 'no pages exist', Browser.Buttons.OK);
    return;
  }

  var template = HtmlService.createTemplateFromFile('MyHTMLFile');
  template.data = names;
  var html = template.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME).setWidth(400).setHeight(20*names.length + 100);
  SpreadsheetApp.getUi().showModalDialog(html, 'title');
} 

function createGraph(agents) {
  Logger.log(agents);
}

这是更新的HTML对话框:

<div id="container">
  <link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.9.1/themes/cupertino/jquery-ui.css">
  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
  <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.9.1/jquery-ui.min.js"></script>

  <fieldset>
    <legend>Select the users you want to add</legend>
    <div id="agentList">
      <?for (var i = 0; i < data.length; i++) { ?>
      <b> <input type="checkbox" id="agent<?=i?>" value=<?=data[i]?> /> <?=data[i]?><br /></b>
      <? } ?>
      <br />
    </div>
    <input type="button" value="OK" onClick="createGraph()" />
  </fieldset>
</div>

<script>
// Pass input to server-side createGraph()
function createGraph() {
  var agents;
  var nrOfAgents = $("#agentList > div").length;
  for(var i = 0; i < nrOfAgents; i++){
    if($('agent'+i).is(":checked")){
      agents.push($('agent'+i).value);
    }
  }

  google.script.run
        .withSuccessHandler(
           // input delivered, close dialog
           function() {
             google.script.host.close();
           })
           .withFailureHandler(
           function() {
             var div = $('<div id="error" class="error">' + msg + '</div>');
             $(element).after($("#container"));
           })
            .createGraph(agents);
}

</script>

如果您有任何线索如何实现这一点,请随时启发我,如果您看到其他任何与脚本有关的请指出。正如我所说,我是googlescript的新手,通常也不会输入javascript。

1 个答案:

答案 0 :(得分:0)

好吧,我想我可以看到你想要做什么,但你仍然做错了一些事情。让我试着收紧你的代码。我在代码中添加注释以尝试解释。

这是你的对话框应该是这样的:            

  <fieldset>
    <legend>Select the users you want to add</legend>
    <div id="agentList">
      <?for (var i = 0; i < data.length; i++) { ?>
      <b> <input type="checkbox" id="agent<?=i?>" value=<?=data[i]?> /> <?=data[i]?><br /></b>
      <? } ?>
      <br />
    </div>
    <input type="button" value="OK" />
  </fieldset>
</div>

<script>
//since you are using jquery i went ahead and used it
//in google scripts (as far as i know) you can't use the onclick property inside html. 
//so you have to use jquery's $().click() syntax.
$(document).ready(function() {
  $('input').click(function() {
    google.script.run
      .withSuccessHandler(function(response) {
        //whatever you want to do with the response
        google.script.host.close();
      })
      .withFailureHandler(function(error) {
        var div = $('<div id="error" class="error">' + error + '</div>');
        $(element).after($("#container"));
      })
      .createGraph($('#agentsList').val());
  });
});
</script>

您的createGraph函数应该放在您的服务器端代码中(无论调用.gs文件)

希望这能帮到你一点点。我在哪里可以澄清什么?