替换日期列的arrayToDataTable

时间:2017-11-24 20:23:16

标签: date google-apps-script google-sheets google-visualization

我是stackexchange的新手,所以如果这个问题太广泛或已经找不到我无法找到的地方,我很抱歉。您可以找到电子表格here,脚本here和信息中心(开发版)here

我一直在谷歌应用程序脚本可视化中处理日期几天。

我的最终目标是制作一个包含带注释时间轴的仪表板以及基于电子表格中数据集的其他图表。我使用Mogsdad tutorial创建了一个3层Google可视化仪表板,其中数据从外部电子表格中提取,然后使用arrayToDataTable拉入DataTable。一切都开箱即用。但是,我的数据包含日期,因此我在原始数据中添加了日期列,但是alas arrayToDataTable不接受每this post个日期类型。因此,当添加Date列时,我得到以下结果:

  

ScriptError:脚本已完成但返回的值不是a   支持返回类型。

我尝试了多种方法来确保偶数日期格式化:选项包括将值放在日期列中new Date(dateColumn[i])dateColumn[i].toJSON()(渲染仪表板,但日期无法处理),电子表格中的强制日期格式(yyyy-MM-dd),使用上面帖子中概述的DataView(仪表板没有超过'Loading'),等等。

所以我的问题是,在这种3层方法中,接受日期列的arrayToDataTable的替代方案是什么?或者,以下方法中的错误是什么?

对于我尝试添加列的所有情况,我已将代码从var data = google.visualization.arrayToDataTable(response,false)更改为var data = google.visualization.DataTable()

我尝试了以下内容:

  1. 手动添加列并手动添加数据(不工作)

    //Add Columns 
    data.addColumn('string','Name');
    data.addColumn('string','Gender');
    data.addColumn('number','Age');
    data.addColumn('number','Donuts eaten');
    data.addColumn('date','Last Donut Eaten');
    
     //Add Rows
     data.addRows([
       ['Miranda','Female', 22,6,6],
       ['Jessica','Female',22,6,12],
       ['Aaron','Male',3,1,13]
     ]);
    
  2. 自动添加没有日期的行(添加行,但只有在没有日期列时才有效)

     //Add Rows
     for (var i=1; i<response.length; i++) {
       data.addRow(response[i]);
     }
    
  3. 手动添加列并自动添加行(不工作,1和2的组合)

  4. 自动添加带循环的列(不工作,无论是否为日期)

    for (var i=0; i<response[0].length; i++) {
      if (response[1][i] instanceof Date) {  //Checks if first value is Date
        data.addColumn('date',response[0][i]);
      };
      else if (response[1][i] instanceof Number)  //Checks if first value is Number
        data.addColum('number',response[0][i]);
      else data.addColumn('string',response[0][i]; //Otherwise assume string
      }; 
    
  5. 非常感谢你的帮助!

1 个答案:

答案 0 :(得分:0)

您可以使用查询(google.visualization.Query)类从电子表格中提取数据,
这将正确转换日期列...

&#13;
&#13;
google.charts.load('current', {
  packages:['table']
}).then(function () {
  var queryURL = 'https://docs.google.com/spreadsheets/d/1aaxYNLCuPz3o3TA1jdryenUP01Qbkdaut4AR5eIhe9s/edit#gid=0';
  var query = new google.visualization.Query(queryURL).send(function (response) {
    var data = response.getDataTable();

    // show column types
    for (var i = 0; i < data.getNumberOfColumns(); i++) {
      console.log(data.getColumnLabel(i), '=', data.getColumnType(i));
    }

    // draw table chart
    var table = new google.visualization.Table(document.getElementById('chart-table'));
    table.draw(data);
  });
});
&#13;
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="chart-table"></div>
&#13;
&#13;
&#13;

注意:该示例使用jsapi加载库,
不应再使用此库 根据{{​​3}} ...

  

通过jsapi加载程序保留的Google图表版本不再一致更新。请从现在开始使用新的gstatic loader.js

这只会更改load语句,请参阅上面的代码段...