0

我正在使用Google Apps腳本和電子表格。我試圖找出一種方式來返回一個谷歌圖表(靜態或動態,無所謂)。我將使用的數據集將放在電子表格中,我希望Google圖表以網絡應用程序的形式返回(網址應以script.google.com/macros/idforscript開頭)。我曾嘗試使用官方的Google Apps腳本教程,但即使它們不起作用,當我打開頁面時,仍會以紅色矩形框出現[400]錯誤。這裏是我使用的代碼:如何在Google Apps腳本中從工作表中獲取圖表

function doGet() { 
    /* 
    var data = Charts.newDataTable() 
     .addColumn(Charts.ColumnType.STRING, 'Month') 
     .addColumn(Charts.ColumnType.NUMBER, 'In Store') 
     .addColumn(Charts.ColumnType.NUMBER, 'Online') 
     .addRow(['January', 10, 1]) 
     .addRow(['February', 12, 1]) 
     .addRow(['March', 20, 2]) 
     .addRow(['April', 25, 3]) 
     .addRow(['May', 30, 4]) 
     .build(); 
     */ 
    var data = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1PPlSIiQ7fZ5AzcyB61iVmIBQQepm6vubd4S2Eo9fWOg/edit#gid=0").getSheets()[0]; 


    var chart = data.newChart().setChartType(Charts.ChartType.BAR).addRange(data.getRange('A1:B3')).build(); 
    var uiApp = UiApp.createApplication().setTitle('My Chart'); 
    uiApp.add(chart); 
    return uiApp; 

} 

你知道這個問題的解決方案嗎?任何幫助是極大的讚賞。

回答

1

的原因錯誤是newCharts()建()函數返回一個embeddedChart對象:

var chart = data.newChart().setChartType(Charts.ChartType.BAR).addRange(data.getRange('A1:B3')).build(); 

如此地:https://developers.google.com/apps-script/reference/spreadsheet/embedded-chart-builder#build()

然而,對於了UiApp你需要一個圖表對象,你應該能夠使用嵌入式Chart對象的setId()方法。不幸的是,使用該方法會產生這樣的錯誤:「訪問類」Chart「被禁止」錯誤。這個問題可以跟蹤here

另請注意UiApp自2014年起已棄用,因此建議不要將其用於新項目。

現在爲解決方案和一些好消息:)。下面你會發現一個修改後的代碼,它可以和embeddedChart一起使用,爲你的網頁提供一個靜態圖表。

試試這個:

function doGet() { 
    /* 
    var data = Charts.newDataTable() 
     .addColumn(Charts.ColumnType.STRING, 'Month') 
     .addColumn(Charts.ColumnType.NUMBER, 'In Store') 
     .addColumn(Charts.ColumnType.NUMBER, 'Online') 
     .addRow(['January', 10, 1]) 
     .addRow(['February', 12, 1]) 
     .addRow(['March', 20, 2]) 
     .addRow(['April', 25, 3]) 
     .addRow(['May', 30, 4]) 
     .build(); 
     */ 
    var data = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1PPlSIiQ7fZ5AzcyB61iVmIBQQepm6vubd4S2Eo9fWOg/edit#gid=0").getSheets()[0]; 


    var chart = data.newChart().setChartType(Charts.ChartType.BAR).addRange(data.getRange('A1:B3')).build(); 
    var blob = chart.getBlob().setContentType('image/jpeg'); 
    var bytes = blob.getBytes(); 
    var base64String = Utilities.base64Encode(bytes); 
    var html = '<img src="data:' + blob.getContentType() + ';base64,' + base64String + '"/>'; 
    return HtmlService.createHtmlOutput(html) 
} 

了UiApp已經廢棄了,因爲2014年。所以,你將不得不使用HTML服務來創建內容。 https://developers.google.com/apps-script/reference/ui/ui-app

希望有幫助。

+0

工作就像一個魅力!謝謝! @jagannathan – Vicky

相關問題