2012-11-15 60 views
1

我有一組已發佈的信息顯示板鏈接到谷歌網站。儀表板都從谷歌電子表格中提取數據,它們相當基本 - 主要是可過濾的數據表。這是一個非常大的電子表格,它有很多vlookups和一些導入範圍,一些過濾器公式,一些查詢公式......有很多事情要做...通常你會得到「一些公式需要一段時間來處理消息「除非電子表格打開,否則Google Apps腳本發佈的信息中心不會加載數據

如果您打開了電子表格,那麼儀表板可以很好地工作。或者如果有其他人開放。但是,如果您關閉電子表格並稍等片刻,並在電子表格關閉時嘗試運行儀表板,那麼儀表板通常不會提取任何數據。

我很懷疑我需要讓儀表板等待數據加載一段時間,或者以某種方式在「背景」中打開電子表格(如果可能的話)。有什麼想法嗎?以下是我擁有的示例儀表板:

function doGet() { 

    var ss = SpreadsheetApp.openById("0Aq2VphSIvT4NdE1IRTlzV0NyWF9XZ1hsX2hXZG0xdHc"); 
    var lastrow = ss.getSheetByName('CIC Student Aggregate').getLastRow(); 
    var data = ss.getSheetByName('CIC Student Aggregate').getRange(1, 1, lastrow, 13); 

    var StudentFilter = Charts.newStringFilter() 
     .setFilterColumnLabel("Student Name") 
     .build(); 
    var TotalsFilter = Charts.newNumberRangeFilter() 
     .setFilterColumnLabel("Total Interactions") 
     .build(); 

    var tablechart = Charts.newTableChart() 
     .setDimensions(680, 550) 
     .setDataViewDefinition(Charts.newDataViewDefinition() 
         .setColumns([0,1,7,8,9,10,11,12])) 
    .build(); 

    var piechart = Charts.newPieChart() 
     .setDimensions(330, 350) 
     .setDataViewDefinition(Charts.newDataViewDefinition() 
         .setColumns([0,12])) 
     .build(); 

    var dashboard = Charts.newDashboardPanel() 
     .setDataTable(data) 
     .bind([StudentFilter,TotalsFilter], [tablechart,piechart]) 
     .build(); 


    var uiApp = UiApp.createApplication() 
     .setTitle("Interactions Totals") 
     .setWidth(980) 
     .setHeight(600); 

dashboard.add(uiApp.createVerticalPanel() 
       .add(StudentFilter).add(TotalsFilter) 
       .setSpacing(1) 
    .add(uiApp.createHorizontalPanel() 
     .add(uiApp.createVerticalPanel()) 
       .add(tablechart).add(piechart) 
     )); 
    uiApp.add(dashboard); 
    return uiApp; 
} 
+2

您的電子表格是否依賴很多公式?我聽說過一些公式值無法立即訪問的情況。也許在腳本的早期嘗試做一個Range.getValues(),以便公式被迫計算。 –

+0

它確實 - 它本質上是一個電子表格,它從其他工作表中導入大量數據,以便我們可以生成具有多個數據源的儀表板。我打電話給「var data = ss.getSheetByName('CIC Student Aggregate')。getRange(1,1,lastrow,13);」作爲將儀表板放在一起之前的第三個變量 - 您是否認爲與此不同可能會加快速度? – eod

+1

getRange()實際上並未加載該範圍中的值,因此不會導致工作表重新計算自身。嘗試在某個時刻在該範圍上調用getValues()。 –

回答

0

你還有問題嗎?

如果是這樣,您的儀表板中是否有一些「導入範圍」?

如果您在通過導入範圍生成數據的範圍內讀取帶有appscript的數據,則在電子表格關閉時它將不會返回任何內容。

實際上,只有當用戶打開電子表格時纔會觸發「導入範圍」。 Appscript不會觸發Spreadsheet打開時的「導入範圍」。

+0

是的,我們正在儀表板中使用導入範圍,我仍然有這個問題,是否有解決導入範圍問題的解決方法? – eod

+0

只有一個解決方法,你將不得不做一個複製和行爲像導入範圍的功能。它比本地導入區域更快速,更高效。 –

相關問題