我有一組已發佈的信息顯示板鏈接到谷歌網站。儀表板都從谷歌電子表格中提取數據,它們相當基本 - 主要是可過濾的數據表。這是一個非常大的電子表格,它有很多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;
}
您的電子表格是否依賴很多公式?我聽說過一些公式值無法立即訪問的情況。也許在腳本的早期嘗試做一個Range.getValues(),以便公式被迫計算。 –
它確實 - 它本質上是一個電子表格,它從其他工作表中導入大量數據,以便我們可以生成具有多個數據源的儀表板。我打電話給「var data = ss.getSheetByName('CIC Student Aggregate')。getRange(1,1,lastrow,13);」作爲將儀表板放在一起之前的第三個變量 - 您是否認爲與此不同可能會加快速度? – eod
getRange()實際上並未加載該範圍中的值,因此不會導致工作表重新計算自身。嘗試在某個時刻在該範圍上調用getValues()。 –