Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ScriptError:脚本已完成,但返回值不是受支持的返回类型_Javascript_Charts_Google Apps Script_Google Sheets_Google Visualization - Fatal编程技术网

Javascript ScriptError:脚本已完成,但返回值不是受支持的返回类型

Javascript ScriptError:脚本已完成,但返回值不是受支持的返回类型,javascript,charts,google-apps-script,google-sheets,google-visualization,Javascript,Charts,Google Apps Script,Google Sheets,Google Visualization,所以我整天都在尝试谷歌应用程序脚本和图表API,但不幸的是,我一无所获 我做了很多事情,包括遵循Mogsdad写得很好的教程。以下是我到目前为止的代码——包括那个教程中的代码,但我一直收到一个错误,说脚本已经完成,但返回的类型与接受的不同,或者类似的东西 Dashboard-Code.gs: /** * Serves HTML of the application for HTTP GET requests. * From gist.github.com/mogsdad/24518dff34

所以我整天都在尝试谷歌应用程序脚本和图表API,但不幸的是,我一无所获

我做了很多事情,包括遵循Mogsdad写得很好的教程。以下是我到目前为止的代码——包括那个教程中的代码,但我一直收到一个错误,说脚本已经完成,但返回的类型与接受的不同,或者类似的东西

Dashboard-Code.gs:

/**
 * Serves HTML of the application for HTTP GET requests.
 * From gist.github.com/mogsdad/24518dff348ad14d3929
 *
 * @param {Object} e event parameter that can contain information
 *     about any URL parameters provided.
 */
function doGet(e) {
  var template = HtmlService.createTemplateFromFile('Index');

  // Build and return HTML in IFRAME sandbox mode.
  return template.evaluate()
      .setTitle('Dashboard demo')
      .setSandboxMode(HtmlService.SandboxMode.IFRAME);
}


/**
 * Return all data from first spreadsheet as an array. Can be used
 * via google.script.run to get data without requiring publication
 * of spreadsheet.
 * From gist.github.com/mogsdad/24518dff348ad14d3929
 *
 * Returns null if spreadsheet does not contain more than one row.
 */
function getSpreadsheetData() {
  // This does not work, see https://code.google.com/p/google-apps-script-issues/issues/detail?id=5233
//  var ss = SpreadsheetApp.getActiveSpreadsheet();
//  var data = ss.getSheets()[0].getDataRange().getValues();
  var sheetId = '1-EE_WDD6QYi257_utUf_D0v5e9Gf8Lj5tETPqqllvxk';  // Replace with your spreadsheet ID. (Ick.)
  var data = SpreadsheetApp.openById(sheetId).getSheets()[0].getDataRange().getValues();
  return (data.length > 1) ? data : null;
}
Index.html:

<!-- Use a templated HTML printing scriptlet to import common 

stylesheet. -->
<?!= HtmlService.createHtmlOutputFromFile('Stylesheet').getContent(); ?>
<html>
  <body>
    <h1 id="main-heading">Loading...</h1>
    <div id="dashboard-div">
      <div id="control-div">
        <div id="selector-div">
        </div>
        <div id="selector1-div">
        </div>
      </div>
      <div id="charts-div">

        <div id="table-div">
        </div>
      </div>
    </div>
    <div class="hidden" id="error-message">
    </div>
  </body>
</html>

<!-- Store data passed to template here, so it is available to the
     imported JavaScript. -->
<script>
</script>

<!-- Use a templated HTML printing scriptlet to import JavaScript. -->
<?!= HtmlService.createHtmlOutputFromFile('JavaScript').getContent(); ?>

加载。。。
和JavaScript.html(我决定坚持Mogsdad所说的):


load('45',{packages:['corechart']});
google.charts.setOnLoadCallback(drawChart);
//加载可视化API和所需的包。
load('visualization','1.0',{'packages':['controls']});
/**
*在加载对话框时运行初始化。
*/
$(函数(){
//将回调设置为在加载Google Visualization API时运行。
//注意:也可以通过google.load选项完成。
setOnLoadCallback(sendQuery);
//如果需要,在此处为对话框元素分配处理程序函数。
//在此处调用服务器以检索生成所需的任何信息
//如有必要,请打开该对话框。
});
/**
*发出对电子表格数据的异步请求。
*来自gist.github.com/mogsdad/60dcc416ed74fceb5f9
*/
函数sendQuery(){
google.script.run
.withSuccessHandler(drawDashboard)
.withFailureHandler(函数(msg){
//在此处响应故障条件。
$('主标题').text(msg);
$(“#主标题”).addClass(“错误”);
$(“#错误消息”).show();
})
.getSpreadsheetData();
}
/**
*使用响应参数中的数据生成可视化的回调函数。
*来自gist.github.com/mogsdad/60dcc416ed74fceb5f9
* 
*@param{Object[][]}两维可视化数据数组
*/
功能面板(响应){
$(“#主标题”).addClass(“隐藏”);
如果(响应==null){
警报('错误:源数据无效')
返回;
}
否则{
//将电子表格内容(数组)转换为数据表对象
var data=google.visualization.arrayToDataTable(响应,false);
var dashboard=newgoogle.visualization.dashboard(document.getElementById('dashboard-div'));
var table=new google.visualization.ChartWrapper({
“图表类型”:“表格”,
“containerId”:“表分区”
});
var categoryPicker=new google.visualization.ControlWrapper({
“controlType”:“CategoryFilter”,
“containerId”:“选择器div”,
“选项”:{
“filterColumnLabel”:“类别”
}
});
var subcategory picker=new google.visualization.ControlWrapper({
“controlType”:“CategoryFilter”,
“containerId”:“selector1 div”,
“选项”:{
“filterColumnLabel”:“类别”
}
});
//设置控件和图表之间的依赖关系
dashboard.bind([categoryPicker,subCategoryPicker],表);
//绘制仪表板的所有可视化组件
仪表盘.绘图(数据);
}
}  
我不需要数字过滤器,我所需要的只是一个级联下拉+表格


如果有人给我指点,我将不胜感激。我哪里做错了?我不认为问题出在JS.html文件中——这可能与从Google工作表中获取数据有关。

首先,不需要两个图表库,
jsapi
&
loader.JS

根据

通过
jsapi
loader仍然可用的谷歌图表版本不再持续更新。从现在起,请使用新的gstatic
loader.js


接下来,将回调设置为不存在的函数

这里-->
google.charts.setOnLoadCallback(drawChart)


建议安装类似于以下内容

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="https://www.gstatic.com/charts/loader.js"></script>
<script>
  // Load the Visualization API and desired package(s).
  google.charts.load('45', {
    callback: sendQuery,
    packages: ['controls', 'corechart']
  });

  /**
   * Issue asynchronous request for spreadsheet data.
   * From gist.github.com/mogsdad/60dcc4116ed74fceb5f9
   */
  function sendQuery() {
    google.script.run
      .withSuccessHandler(drawDashboard)
      .withFailureHandler(function(msg) {
            // Respond to failure conditions here.
            $('#main-heading').text(msg);
            $('#main-heading').addClass("error");
            $('#error-message').show();
          })
      .getSpreadsheetData();
  }

  /**
   * Callback function to generate visualization using data in response parameter.
   * From gist.github.com/mogsdad/60dcc4116ed74fceb5f9
   * 
   * @param {Object[][]}  Two-Dim array of visualization data
   */
  function drawDashboard(response) {
    $('#main-heading').addClass("hidden");
    if (response == null) {
      alert('Error: Invalid source data.')
      return;
    }
    else {
      // Transmogrify spreadsheet contents (array) to a DataTable object
      var data = google.visualization.arrayToDataTable(response,false);
      var dashboard = new google.visualization.Dashboard(document.getElementById('dashboard-div'));

      var table = new google.visualization.ChartWrapper({
        'chartType': 'Table',
        'containerId': 'table-div'
      });

      var categoryPicker = new google.visualization.ControlWrapper({
        'controlType': 'CategoryFilter',
        'containerId': 'selector-div',
        'options': {
          'filterColumnLabel': 'Category'
        }
      });

      var subCategoryPicker = new google.visualization.ControlWrapper({
        'controlType': 'CategoryFilter',
        'containerId': 'selector1-div',
        'options': {
          'filterColumnLabel': 'Category'
        }
      });


      // Set up dependencies between controls and charts
      dashboard.bind([categoryPicker,subCategoryPicker], table);
      // Draw all visualization components of the dashboard
      dashboard.draw(data);
    }
  }  
</script>
。隐藏{
显示:无;
}

加载。。。

Hey@WhiteHat-感谢您的回复。所以我接受了代码并实现了它,但仍然得到了完全相同的错误。想法?你认为错误在于getSpreadsheetData()函数吗?console.log从Dashboard-Code.gs文件中不起作用,在其他任何地方都起作用。你认为我还能做些什么吗?在看到你的编辑之前,我刚刚开始研究这个问题。非常感谢!你让我开心。
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="https://www.gstatic.com/charts/loader.js"></script>
<script>
  // Load the Visualization API and desired package(s).
  google.charts.load('45', {
    callback: sendQuery,
    packages: ['controls', 'corechart']
  });

  /**
   * Issue asynchronous request for spreadsheet data.
   * From gist.github.com/mogsdad/60dcc4116ed74fceb5f9
   */
  function sendQuery() {
    google.script.run
      .withSuccessHandler(drawDashboard)
      .withFailureHandler(function(msg) {
            // Respond to failure conditions here.
            $('#main-heading').text(msg);
            $('#main-heading').addClass("error");
            $('#error-message').show();
          })
      .getSpreadsheetData();
  }

  /**
   * Callback function to generate visualization using data in response parameter.
   * From gist.github.com/mogsdad/60dcc4116ed74fceb5f9
   * 
   * @param {Object[][]}  Two-Dim array of visualization data
   */
  function drawDashboard(response) {
    $('#main-heading').addClass("hidden");
    if (response == null) {
      alert('Error: Invalid source data.')
      return;
    }
    else {
      // Transmogrify spreadsheet contents (array) to a DataTable object
      var data = google.visualization.arrayToDataTable(response,false);
      var dashboard = new google.visualization.Dashboard(document.getElementById('dashboard-div'));

      var table = new google.visualization.ChartWrapper({
        'chartType': 'Table',
        'containerId': 'table-div'
      });

      var categoryPicker = new google.visualization.ControlWrapper({
        'controlType': 'CategoryFilter',
        'containerId': 'selector-div',
        'options': {
          'filterColumnLabel': 'Category'
        }
      });

      var subCategoryPicker = new google.visualization.ControlWrapper({
        'controlType': 'CategoryFilter',
        'containerId': 'selector1-div',
        'options': {
          'filterColumnLabel': 'Category'
        }
      });


      // Set up dependencies between controls and charts
      dashboard.bind([categoryPicker,subCategoryPicker], table);
      // Draw all visualization components of the dashboard
      dashboard.draw(data);
    }
  }  
</script>