【问题标题】:Fetching data from spreadsheet in script: "Data table is not defined"从脚本中的电子表格中获取数据:“数据表未定义”
【发布时间】:2016-01-31 19:25:35
【问题描述】:

我正在尝试使用 Google Visualization App Geomap 制作脚本。在 Google Developers 页面上的示例代码中,他们使用的是硬编码表。我想要做的是让代码使用连接到 Google 表单的 Google 电子表格中的数据。更具体地说,我想使用来自以下电子表格的电子表格标签«国家»的数据:https://docs.google.com/spreadsheets/d/1l77TXctG6mgva1ggs3iR3eBNx949hzn9SiVjki1v59I/edit?usp=sharing

不知何故,这不起作用,我收到下面列出的错误消息。

如何以正确的格式从电子表格中收集数据?我尝试使用此过程从电子表格中收集数据:https://google-developers.appspot.com/chart/interactive/docs/spreadsheets

网页上的错误信息:

"Data table is not defined"

Safari 控制台中的错误消息:

TypeError: undefined is not an object (evaluating 'new google.visualization.Query’)
drawChart help:113
(anonymous function) help:117

我的代码

<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
  google.load("visualization", "1", {packages:["geomap"]});
  google.setOnLoadCallback(drawMap);

  function drawMap() {
    var opts = {sendMethod: 'auto'};

    // ***My code***
    var query = new google.visualization.Query('https://docs.google.com/spreadsheets/d/1l77TXctG6mgva1ggs3iR3eBNx949hzn9SiVjki1v59I/edit#gid=957991050', 'sheet=countries', 'headers=1');
    var data = query.send(handleQueryResponse);

    var options = {};
    options['dataMode'] = 'regions';

    var container = document.getElementById('regions_div');
    var geomap = new google.visualization.GeoMap(container);

    geomap.draw(data, options);
  };

  function handleQueryResponse(response) {
      if (response.isError()) {
        alert('Error in query: ' + response.getMessage() + ' ' + response.getDetailedMessage());
        return;
      }

      return response.getDataTable();
    }

</script>

希望有人可以帮助我完成这项(希望)不那么艰巨的任务。非常感谢您! :-)

【问题讨论】:

    标签: javascript web google-apps-script google-docs-api geomap


    【解决方案1】:

    您可以在回调函数handleQueryResponse 中获取data

    function handleQueryResponse(response) {
      if (response.isError()) {
        alert('Error in query: ' + response.getMessage() + ' ' + response.getDetailedMessage());
      } else {
        var container = document.getElementById('regions_div');
        var geomap = new google.visualization.GeoMap(container);
        var data = response.getDataTable();
        geomap.draw(data, options);
      }
    }
    

    Google 提供了示例 here

    如果需要,还要检查您收到的响应格式并使用方法google.visualization.arrayToDataTabledata 格式化为example,因为它的格式应该是正确的。

    【讨论】:

    • 恐怕这对我没有多大帮助。有谁知道这件事吗?
    • 我找不到相关文档,但是在查询电子表格时,查询将选择第一个工作表中的信息。在您的电子表格中,“记录”是第一张表格,这就是被查询的表格。尝试更改工作表的顺序,以便“国家”是第一个和“记录”。这是 Viktor Kukurba 提到的补充内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多