2013-12-20 44 views
1

這裏的目標是在電子表格加載時以編程方式從預先存在的數據創建圖表。使用Apps創建圖表腳本無法插入到電子表格

documentation for the EmbeddedChart class有兩個例子,既修改現有圖表,並且,我需要,創造一個新問題:

function newChart(range, sheet){ 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var chartBuilder = sheet.newChart(); 
    chartBuilder.addRange(range) 
     .setChartType(Charts.ChartType.Line) 
     .setOption('title', 'My Line Chart!'); 
    sheet.insertChart(chartBuilder.build()); 
} 

例如谷歌丟失:.setPosition()

我已經試過落實此功能如下:

function makeChart(sheet, range) { 
    Logger.log('MAKING CHART'); 
    var chart = sheet.newChart(); 
    chart.addRange(range) 
    .setChartType(Charts.ChartType.BAR) 
    .setOption('title','I love Google Apps Script'); 
    sheet.insertChart(chart.build()); 
} 

其中表和範圍定義爲:

var sheet = SpreadsheetApp.getActiveSheet(); 
var range = sheet.getRange("C1:D16"); 

makeChart()onOpen()調用,這我可以看到正被執行。儘管如此,圖表從不出現在電子表格中。

我注意到在調用.build()方法後沒有記錄任何東西,但是關於此方法的文檔很少,除了聲明它必須在製作圖表之後調用。

編輯:該腳本失敗,因爲.insertChart()需要一個EmbeddedChart對象,但被賦予一個EmbeddedChartBuilder。根據文檔,.build()方法應該返回一個EmbeddedChart。但事實並非如此。

回答

2

以下代碼適用於我,將範圍爲A2:B8的數據顯示爲表格中嵌入的條形圖。

function varSet(){ 

    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getActiveSheet(); 
    var dataRange = sheet.getRange("A2:B8"); 

    buildChart(sheet, dataRange) 

} 

function buildChart(sheet, dataRange) { 

    var newChart = sheet.newChart() 
    .setChartType(Charts.ChartType.BAR) 
    .addRange(dataRange) 
    .setPosition(5, 5, 0, 0) 
    .build(); 

    sheet.insertChart(newChart); 

}; 

至於我可以告訴唯一的區別是我指定的位置插入圖表,以及與insertChart()方法調用之前創建圖表。希望這可以幫助。

+0

感謝您的輸入伴侶。我已經嘗試在插入之前調用'.build()',並添加一個'.setPosition()'值 - 仍然沒有運氣。 我想知道是否與使用的數據有關,它是相當簡單的數字,但我不會這麼想。 – kyranjamie

+0

@kyranjamie您是使用Google電子表格還是舊版Google?我仍然在與舊版本合作,因爲腳本和新版本存在一些嚴重問題,可能會導致您的問題? –

3

谷歌自己的例子在這裏:

https://developers.google.com/apps-script/reference/spreadsheet/embedded-chart

這是錯誤的兩項罪名。首先ChartType是'LINE'而不是'Line',其次它需要調用.setPosition,否則你會得到一個關於'那些列超出界限'的錯誤。 @ samScholefield的回答是正確的。

注意,只是鏈接「.build()」在這樣結束不起作用:

var chart = sheet.newChart(); 
chart.addRange(range) 
.setChartType(Charts.ChartType.BAR) 
.setPosition(5,5,0,0) 
.setOption('title','I love Google Apps Script') 
.build(); 
sheet.insert(chart); 

它必須是這樣的:

var chart = sheet.newChart(); 
chart.addRange(range) 
.setChartType(Charts.ChartType.BAR) 
.setPosition(5,5,0,0) 
.setOption('title','I love Google Apps Script'); 
sheet.insert(chart.build()); 
+0

哈哈。謝謝@KevH!這也是我遇到的問題,您的解決方案可以解決它!我想知道這個問題到底是什麼。即使在這種情況下,傳遞給insertChart()的參數也應該是EmbeddedChartBuilder或EmbeddedBarChartBuilder。 btw:表單方法是'insertChart()',而不是'insert()' –

相關問題