【问题标题】:Returning a serverside datatable to client with google App Script使用 google App Script 将服务器端数据表返回给客户端
【发布时间】:2015-04-10 07:14:06
【问题描述】:

我想将我在谷歌应用程序脚本中创建的数据表返回给客户端,其中包含电子表格中的数据。我使用 succesHandler 来获取数据并使用它来创建图表。我唯一的问题是我的数据为空。看来我无法将数据表对象返回到客户端页面。

我需要将它发送给客户端,因为 Google Apps 脚本正在弃用 UIApp 函数,所以我需要客户端中的 google.visualization 函数。

代码.gs

function doGet() {  return HtmlService.createHtmlOutputFromFile('Index.html')
  .setSandboxMode(HtmlService.SandboxMode.IFRAME);}

function getDataTable()
{
  var bestanden = DriveApp.searchFiles('title contains "' + "kwalrap" + '"');
  while (bestanden.hasNext()) 
  {
    var bestand = bestanden.next();
    var docid = ( bestand.getId() );
       Logger.log(docid);
    };
  var sheets= SpreadsheetApp.openById(docid).getSheets();
  //vanaf sheet 0. tot hij bij de laatset sheet is. dan steeds 2 sheets verder.
  for(var j = 0; j < 2; j = j+1)
  {
    var sheet = sheets[j];
    //Logger.log(sheet.getSheetName());
    var range = sheet.getRange(2,1,sheet.getLastRow(),8);
    var inforange = sheet.getRange(2,1,1,8);
    var values = range.getValues();
    var infovalues = inforange.getValues();
    var data = Charts.newDataTable()
      .addColumn(Charts.ColumnType.STRING, "Tijd")
      .addColumn(Charts.ColumnType.NUMBER, "dco")
      .addColumn(Charts.ColumnType.NUMBER, "dcp")
      .addColumn(Charts.ColumnType.NUMBER, "dct")
      .addColumn(Charts.ColumnType.NUMBER, "dcz")
      .addColumn(Charts.ColumnType.NUMBER, "ldc")
      .addColumn(Charts.ColumnType.NUMBER, "lv")      

    for(var i = 0; i < sheet.getLastRow()-1; i++)
    {
      data.addRow([values[i][0],values[i][1],values[i][2],values[i][3],values[i][4],values[i][5],values[i][6]]);
      Logger.log(values[i]);
    }
   var dataTable = data.build();
   return dataTable;
// return  JSON.stringify(values);
  }
}

索引.html

<html>
  <head>
    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
  <script type="text/javascript">

   google.load("visualization", "1", {packages:["corechart"]});

    function onSuccess(data) {
  var options = {
      title: 'Why doesn't this work'
    };
  new google.visualization.LineChart(
      document.getElementById('visualization_div')).draw(data, options);
  }

  google.script.run.withSuccessHandler(onSuccess)
      .getDataTable();

 </script>
    </head>
 <body>
    <div id="visualization_div" style="width: 600px; height: 380px;';"></div>
     </body>
</html>

为什么我的数据变量在 onSuccesHandler 中为空,我如何在客户端获取数据表

感谢您的帮助

【问题讨论】:

  • 您检查浏览器中的 javascript 控制台是否有错误?
  • 我没有收到错误。如果我在图表中使用此数据,它会在小部件中显示:“数据表未定义”,因为数据为空

标签: javascript google-apps-script datatable google-visualization google-apps


【解决方案1】:

这是因为您需要返回一个普通的 javascript 数组,而不是一个纯粹是服务器端对象的数据表。

【讨论】:

  • 感谢您的回复。我是这么认为的,但是您知道如何轻松地从数据表创建数组吗?
  • 你不知道。只需将值数组传递给客户端。然后在客户端构建数据表。
  • 我会试试的。非常感谢
  • 确保使用应用脚本 iframe 模式。然后遵循常规的谷歌图表文档,而不是应用脚本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-02
  • 1970-01-01
  • 1970-01-01
  • 2020-08-27
相关资源
最近更新 更多