HtmlService:google.script.run无法识别gs函数

时间:2017-09-20 21:20:22

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

我目前正在尝试将一系列值从Google Sheet传递到HtmlService,我将让用户选择一个选项并最终将其传递回.gs脚本。我一直在使用这两个链接作为参考: 1. Google Documentation 2. Stack Overflow example

运行代码时,我查看了我的控制台,发现了这个错误: VM3051:4 Uncaught TypeError: google.script.run.withSuccessHandler(...).getVersionArray is not a function 似乎getVersionArray()未正确传递。从google.script.run调用的其余部分中删除此功能时,错误就会消失。

此外,根据链接二,我尝试使用模板的代码,甚至没有弹出窗口,所以我一直在使用Google文档链接中的HtmlOutput示例作为起点。我也尝试过使用和不使用SandboxMode声明的代码。

gs code:

function bugPieChart() {
  getVersionArray();
  openDialog();

function getVersionArray() {

  var ss = SpreadsheetApp.getActive();
  var valuesR = ss.getSheetByName("report").getRange('R1:R').getValues();
  var valuesS = ss.getSheetByName("report").getRange('S1:S').getValues();

  var versionRSArray = [];

  for (var i = 0; i < valuesR.length; i++) {
    versionRSArray.push(valuesR[i][0]);
  }

  for (var i = 0; i < valuesS.length; i++) {
    versionRSArray.push(valuesS[i][0]);
  }

  versionRSArray.sort();

  var uniqueArray = [];

  uniqueArray.push(versionRSArray[0]);

  for (var i in versionRSArray ) {  
    if((uniqueArray[uniqueArray.length-1]!=versionRSArray[i]) && (versionRSArray[i] !== "")) {
      uniqueArray.push(versionRSArray[i]);
    }
  }
  return uniqueArray;
}

function openDialog() {    
  var html = HtmlService.createHtmlOutputFromFile('index');
  SpreadsheetApp.getUi().showModalDialog(html, 'Dialog title');
  var htmlOutput = html.setSandboxMode(HtmlService.SandboxMode.NATIVE);
  return htmlOutput;  
}

}

的index.html:

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
    <script>
      $(function() {
        google.script.run.withSuccessHandler(buildOptionsList)
            .getVersionArray();
      });
      function buildOptionsList(uniqueArray) {
        var list = $('#optionList');
        list.empty();
        for (var i = 0; i < uniqueArray.length; i++) {
          list.append('<option value="' + uniqueArray[i].toLowerCase() + '">' + uniqueArray[i] + '</option>');
        }  
      }      
    </script>
  </head>
  <body>
    <select id="optionList">
      <option>Loading...</option>    
    </select> 
    <input type="button" value="Close" onclick="google.script.host.close()" />
  </body>
</html>

1 个答案:

答案 0 :(得分:1)

我认为你刚刚错过了上面函数的一个结束括号。

function bugPieChart() {
  getVersionArray();
  openDialog();
}

function getVersionArray() {

  var ss = SpreadsheetApp.getActive();
  var valuesR = ss.getSheetByName("report").getRange('R1:R').getValues();
  var valuesS = ss.getSheetByName("report").getRange('S1:S').getValues();

  var versionRSArray = [];

  for (var i = 0; i < valuesR.length; i++) {
    versionRSArray.push(valuesR[i][0]);
  }

  for (var i = 0; i < valuesS.length; i++) {
    versionRSArray.push(valuesS[i][0]);
  }

  versionRSArray.sort();

  var uniqueArray = [];

  uniqueArray.push(versionRSArray[0]);

  for (var i in versionRSArray ) {  
    if((uniqueArray[uniqueArray.length-1]!=versionRSArray[i]) && (versionRSArray[i] !== "")) {
      uniqueArray.push(versionRSArray[i]);
    }
  }
  return uniqueArray;
}

function openDialog() {    
  var html = HtmlService.createHtmlOutputFromFile('index');
  SpreadsheetApp.getUi().showModalDialog(html, 'Dialog title');
  var htmlOutput = html.setSandboxMode(HtmlService.SandboxMode.NATIVE);
  return htmlOutput;  
}