使用 google.visualisation.data.join 和 doGet() - ReferenceError: "google" is not defined

Posted

技术标签:

【中文标题】使用 google.visualisation.data.join 和 doGet() - ReferenceError: "google" is not defined【英文标题】:using google.visualisation.data.join with doGet() - ReferenceError: "google" is not defined 【发布时间】:2014-10-29 11:22:53 【问题描述】:

我正在尝试通过匹配几列来加入两个工作表。我将它们都加载到我的脚本中,但是我很确定我错误地使用了 join 方法。我做错了什么?

这是整个代码,部署为网络应用程序。

  function doGet() 

  //get the first table  
  var mainsheet = SpreadsheetApp.openById('1pGxg4bEaoNzkL-JS22GO2-eo7K4UlxPNcjD4Na-6Eik').getSheetByName('Form Responses 1');  
  var maintable = mainsheet.getDataRange();

  //get the second table
  var subsetsheet = SpreadsheetApp.openById('1pGxg4bEaoNzkL-JS22GO2-eo7K4UlxPNcjD4Na-6Eik').getSheetByName('Latest Rows');  
  var subsettable = subsetsheet.getDataRange();

  //join the tables - this is where i get the 'ReferenceError: "google" is not defined. ' error 
  var joinedtable = new google.visualisation.data.join(subsettable, maintable, 'left', [[0,1],[1,3],[2,4]],[],[2]);

  //make a chart from the joined table for display
  var joinedtablechart = Charts.newTableChart().setDataTable(joinedtable).build();

  //display the joined table  
  var siteProfiles = UiApp.createApplication();
  siteProfiles.add(joinedtablechart);
  return siteProfiles;

这是线索吗?

Uncaught ReferenceError: google is not defined

感谢指点!

【问题讨论】:

【参考方案1】:

google.visualisation.data.join 不是 Google Apps 脚本。

通过Charts Service 在 GAS 中提供可视化服务。有一个tutorial 可以帮助您入门。

相反,使用模拟google.visualisation.data.join 的行为并返回组合DataTable 的函数来构建您的“加入”数据表。您或许可以改编 Script Examples site 中的 buildFromSpreadsheet(range) 示例。

【讨论】:

感谢您的澄清。我已经按照教程进行操作,它很有帮助,据我所知,除了加入尝试之外,我的代码还不错。这是否意味着我根本无法在我的脚本中使用 google.visualisation.data.join? 不,您将无法直接从 UiApp 代码调用任何外部 javascript 服务。我已添加到答案中...您需要自己“加入”。【参考方案2】:

我得到了这个工作。取消注释以检查是否正确返回了各个表(这就是我的问题)。

<html>
  <head>
    <!--Load the AJAX API-->
    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
    <script type="text/javascript">

      // Load the Visualization API and the piechart package.
      google.load('visualization', '1.0', 'packages':['table']);

      // Set a callback to run when the Google Visualization API is loaded.
      google.setOnLoadCallback(drawJoin);


function drawJoin() 

       var querymain = new google.visualization.Query('https://docs.google.com/spreadsheets/d/1pGxg4bEaoNzkL-JS22GO2-eo7K4UlxPNcjD4Na-6Eik/gviz/tq?gid=178275599');
       querymain.send(handleQueryResponseMain);

       function handleQueryResponseMain(responsemain) 

           if (responsemain.isError()) 
                   alert('Error in query: ' + responsemain.getMessage() + ' ' + responsemain.getDetailedMessage());
                   return;
               

           var datamain = responsemain.getDataTable();

//           var chartmain = new google.visualization.Table(document.getElementById('chartmaindiv'));
//           chartmain.draw(datamain, null);

           var querysubs = new google.visualization.Query('https://docs.google.com/spreadsheets/d/1pGxg4bEaoNzkL-JS22GO2-eo7K4UlxPNcjD4Na-6Eik/gviz/tq?gid=1728586563');
           querysubs.send(handleQueryResponseSubs);

           function handleQueryResponseSubs(responsesubs) 

               if (responsesubs.isError()) 
                   alert('Error in query: ' + responsesubs.getMessage() + ' ' + responsesubs.getDetailedMessage());
                   return;
                   

               var datasubs = responsesubs.getDataTable();

//               var chartsubs = new google.visualization.Table(document.getElementById('chartsubsdiv'));
//               chartsubs.draw(datasubs, null);

               var joineddt = google.visualization.data.join(datamain, datasubs, 'inner', [[1,0],[3,1],[4,2]],[2],[2]);

               var chartjoin = new google.visualization.Table(document.getElementById('chartjoindiv'));
               chartjoin.draw(joineddt, null);
               
          
           


    </script>
  </head>

  <body>
<!--        <div id="chartmaindiv"></div>
    <div id="chartsubsdiv"></div>
-->
    <div id="chartjoindiv"></div>
  </body>
</html>

【讨论】:

以上是关于使用 google.visualisation.data.join 和 doGet() - ReferenceError: "google" is not defined的主要内容,如果未能解决你的问题,请参考以下文章

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份

Kettle java脚本组件的使用说明(简单使用升级使用)