4

我正在使用Google文檔和Google Apps腳本爲我們的衝刺生成一些自動生成的報告。在EmbeddedChart中切換行和列

我想一個圖表添加到我的工作表,一切工作正常用下面的代碼:

var lChartBuilder = SpreadsheetApp.getActiveSheet().newChart(); 
    lChartBuilder.addRange(SpreadsheetApp.getActive().getRange("Tasks!C39:S40")); 
    lChartBuilder.setOption("title", "Task Burndown"); 

    var lChart = lChartBuilder.asLineChart().build(); 
    SpreadsheetApp.getActiveSheet().insertChart(lChart); 

但我的系列組織水平,不是垂直。在編輯器中,我看到選項「切換行/列」,另一個選項「使用C列標籤」 我試過很多選項(如lChartBuilder.setOption("reverseCategories", true);lChartBuilder.setOption("isStacked", true);),但它們看起來都與最後一個選項卡有關, ,而不是「開始」選項卡。

那麼,有沒有一種方法(除了轉置我的數據)來做到這一點,或者我必須手動啓動圖表編輯器來解決這個問題嗎?

獎勵問題:我如何設置(通過Google Apps腳本以及)第一行/列是標題並用作圖例?

回答

3

對於嵌入式圖表,由於嵌入式圖表使用電子表格數據,並且不支持轉換本身,因此對於嵌入式圖表,您將需要轉置數據。但是,您可以通過編程來處理,而轉置操作本身很簡單。

在下面的代碼中,我假設存在名爲「Scratch」的工作表,它將用於存儲轉置數據的工作副本。您可以創建並隱藏此工作表,以免妨礙工作。

// Uses 2D Arrays Library, see https://sites.google.com/site/scriptsexamples/custom-methods/2d-arrays-library 

function buildChart() { 
    var taskSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Tasks"); 
    var lChartBuilder = taskSheet.newChart(); taskSheet.removeChart(chart) 
    var srcData = taskSheet.getRange("Tasks!C39:S40").getValues(); 

    // Transpose the table (using 2D Array Library) 
    var scratchData = ArrayLib.transpose(srcData); 

    var numRows = scratchData.length; 
    var numCols = scratchData[0].length; // assume all rows are same width 

    // Write scratch values to scratch sheet. 
    var scratchSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Scratch"); 
    scratchSheet.getRange(1, 1, numRows, numCols).setValues(scratchData); 
    SpreadsheetApp.flush(); 

    lChartBuilder.addRange(scratchSheet.getDataRange()); 
    lChartBuilder.setOption("title", "Task Burndown"); 

    var lChart = lChartBuilder.asLineChart().setPosition(1, 1, 1, 1).build(); 
    taskSheet.insertChart(lChart); 
}; 

對於獎金...具有格式化這樣的數據確保第一行/列是一個標題,並作爲圖例。

Resulting Chart

現在,你仍然有一些問題需要解決。

  • 此代碼會在每次運行時創建一個新圖表,但您可能需要修改它。 (相反,您需要更新轉置數據,並修改圖表以選擇新範圍(如果更改)。)
  • X軸不顯示所有任務名稱 - 您可能能夠控制那。

你說你不想轉你的數據。不幸的是,就目前的圖表化身而言,沒有任何方法 - 你必須自己處理數據。使用不同的圖表庫插入小部件可能會有效,但表單的小部件支持已被棄用。幸運的是,我已經有了類似的代碼,所以它的工作量比看起來要少。您應該看看ArrayLib中的其他一些過濾功能,您可以使用它做很多事情。

4

對於獎金問題,我有你的獎金答案。 創建/修改圖形時使用此選項:

setOption('useFirstColumnAsDomain','true')