2013-04-25 69 views
0

主要问题:为什么下面的脚本不返回任何东西?当给定版本并部署时,脚本返回'脚本完成但没有返回任何内容'。Google Apps脚本图表服务:脚本已完成但未返回任何内容?

(奖金的问题:我可以在相同的仪表盘内,并在同一个脚本中运行两个不同的数据表两个图表?)

输入是一个谷歌电子表格有四个列标题行:年|月| Group | Count,除Group(单个字母)以外的所有数字。

目标是创建一个年总计数折线图(201001,201002 ...)。理想情况下,我想在同一个脚本内生成另一个按年份组计数的折线图,但一次只能一步...

由于数据没有汇总(而且我是新手谷歌应用程序脚本,并且无法在电子表格本身之外找到任何聚合),我使用散列来计算年度总数。我会为年份组做同样的事情。

它可能不够高雅(我碰巧也是js的新手),但它对我来说很有意义。太糟糕了,它不起作用。感谢指针。

编辑2013年4月25日

试图让在一个脚本太多做,失去了我的立足点。所以我已经在脚本之外进行了聚合,创建了一个新的电子表格,并运行了在这里找到的代码https://sites.google.com/site/appsscripttutorial/chart-services/line-chart:得到了我的折线图。

function doGet(){ 
    // counts by yearmo 
    var ss = SpreadsheetApp.openById('0Atd6tVDA1d3UOI-jfkdlRHbk85Y19BcU9BNFdPNXBlVlE'); 
    var data = ss.getDataRange().getValues(); 
    var yr = []; 
    var mo = []; 
    for (var i = 1; i < data.length; i++) { 
    yr[data[i][0]] = 0; 
    mo[data[i][1]] = 0; 
    } 
    Logger.log(yrLvls = Object.keys(yr)); 
    Logger.log(moLvls = Object.keys(mo)); 
    // initialize hash 
    var yearmo = []; 
    for (var i = 0; i < yrLvls.length; i++){ 
    for (var j = 0; j < moLvls.length; j++){ 
     var key = yrLvls[i] + '-' + moLvls[j] 
     yearmo[ key ] = 0; 
    } 
    } 
    // aggregation 
    for (var i = 1; i < data.length; i++) { 
    yearmo[ data[i][0] + '-' + data[i][1] ] += data[i][3]; 
    } 
    // check 
    var values = Object.keys(yearmo).map(function(key){ 
    return yearmo[key]; 
    }); 
    Logger.log(values); 
    // Year Mo 
    Logger.log("--------------"); 
    var data_yearmo = Charts.newDataTable() 
    .addColumn(Charts.ColumnType.STRING, 'YearMo') 
    .addColumn(Charts.ColumnType.NUMBER, 'Count'); 
    Logger.log(Object.keys(yearmo)); 
    for (key in Object.keys(yearmo)) { 
     Logger.log(key); 
     data_yearmo.addRow( [ key , yearmo[key] ] ); 
    } 
    data_yearmo.build() 

    var lineChart_yearmo = Charts.newLineChart() 
    .setTitle('Counts') 
    .setXAxisTitle('YearMo') 
    .setYAxisTitle('Counts') 
    .setCurveStyle(Charts.CurveStyle.SMOOTH) 
    .setPointStyle(Charts.PointStyle.MEDIUM) 
    .setDataTable(data_yearmo); 

    var uiApp = UiApp.createApplication().setTitle('Yearmo'); 
    uiApp.add(lineChart_yearmo); 
    return uiApp; 
} 
+1

这确实与appengine有什么关系? – 2013-04-25 05:39:31

+0

我仍然对Google的脚本产品感到困惑。取下标签。 – user2105469 2013-04-25 12:38:46

回答

1

我怀疑你没有更新你部署的应用程序的版本。尝试使用“最新的代码”开发链接(当您部署应用程序时,您可以从对话框中获取它),如果可行,请从“管理版本”菜单创建新版本并更新部署的应用程序以使用该版本。

+0

我保存并给出了一个新版本的项目,然后尝试“最新的代码”(部署应用程序):同样的错误。 – user2105469 2013-04-25 12:42:03

+0

试着只是显示一个标签,而不是只看它是否显示 – 2013-04-25 13:32:13

0

我忘了给我的Charts.newLineChart()打电话加.build()

data_yearmo.build()显然不是必要的,但Charts.newLineChart()的'.build()'肯定是。积分转到上面的编辑中的链接。