2013-09-27 98 views
0

當前,我正在使用谷歌腳本構建一個Web應用程序,該應用程序正在閱讀和顯示Google電子表格中的實時數據。不過,我希望它更新它是什麼顯示automaticaly如果電子表格更新,更新電子表格更新時的Web應用程序更新

我一直在嘗試使用時間觸發刷新應用程序,但沒有喜悅......它保持與舊數據靜態。

任何人都可以幫助我嗎?

function doGet(e) { 

    var app = UiApp.createApplication().setTitle('Customer Queue App'); 
    var ss = SpreadsheetApp.openById("SHEET_IDHERE"); 

    app.add(app.createLabel(new Date()).setId("label")) 
    var mypannel = app.createHorizontalPanel(); 
    var mypannel = app.createHorizontalPanel(); 


    var ss = SpreadsheetApp.openById("sheetID_HERE") 

    var nc11 = ss.getRange("a2") 
    var nc12 = ss.getRange("b2") 
    var nc13 = ss.getRange("c2") 
    var nc14 = ss.getRange("d2") 
    var nc15 = ss.getRange("e2") 
    var nc16 = ss.getRange("f2") 
    var nc17 = ss.getRange("g2") 
    var nc21 = ss.getRange("a3") 
    var nc22 = ss.getRange("b3") 
    var nc23 = ss.getRange("c3") 
    var nc24 = ss.getRange("d3") 
    var nc25 = ss.getRange("e3") 
    var nc26 = ss.getRange("f3") 
    var nc27 = ss.getRange("g3") 


    var nv11 = nc11.getValue() 
    var nv12 = nc12.getValue() 
    var nv13 = nc13.getValue() 
    var nv14 = nc14.getValue() 
    var nv15 = nc15.getValue() 
    var nv16 = nc16.getValue() 
    var nv17 = nc17.getValue() 
    var nv21 = nc21.getValue() 
    var nv22 = nc22.getValue() 
    var nv23 = nc23.getValue() 
    var nv24 = nc24.getValue() 
    var nv25 = nc25.getValue() 
    var nv26 = nc26.getValue() 
    var nv27 = nc27.getValue() 

    var mygrid = app.createGrid(5, 7).setId("grid"); 

    mygrid.setWidget(0, 0, app.createLabel(nv12)); 
    mygrid.setWidget(0, 1, app.createLabel(nv13)); 
    mygrid.setWidget(0, 2, app.createLabel(nv14)); 
    mygrid.setWidget(0, 3, app.createLabel(nv15)); 
    mygrid.setWidget(0, 4, app.createLabel(nv16)); 
    mygrid.setWidget(0, 5, app.createLabel(nv17)); 
    mygrid.setWidget(0, 6, app.createButton("Clear Customer").setId("cc1")); 
    mygrid.setWidget(1, 0, app.createLabel(nv22)); 
    mygrid.setWidget(1, 1, app.createLabel(nv23)); 
    mygrid.setWidget(1, 2, app.createLabel(nv24)); 
    mygrid.setWidget(1, 3, app.createLabel(nv25)); 
    mygrid.setWidget(1, 4, app.createLabel(nv26)); 
    mygrid.setWidget(1, 5, app.createLabel(nv27)); 
    mygrid.setWidget(1, 6, app.createButton("Clear Customer").setId("cc2")); 

    mygrid.setStyleAttribute("fontSize","65pt"); 
    mygrid.setStyleAttribute("margin-top","5px"); 
    mygrid.setStyleAttribute("font-weight","bold"); 
    mygrid.setStyleAttribute("color","black"); 

    mypannel.add(mygrid); 

    app.add(mypannel); 

    app.addTimer(app.createServerHandler("update") , 1000); 

    return app; 
} 

function update(e){ 

    var app = UiApp.getActiveApplication(); 
    var ss = SpreadsheetApp.openById("SHEETIDHERE") 

    app.getElementById("label").setText(new Date()); 

    app.getElementById("grid").setVisible(true); 

    app.addTimer(app.createServerHandler("update") , 1000); 

    return app; 
} 
+0

我不知道是誰投了棄權...我個人看不出有什麼明顯的理由這樣做,恕我直言,這個問題是有效的關於SO標準 –

回答

0

您必須使用與日期標籤相同的過程。

給每個元素一個ID並在處理函數中重新賦值。

謹防配額,如果你不斷更新的每一分鐘......

這裏是你修改後的代碼:(我也改變了字體大小屬性沒有工作)

function doGet(e) { 
    var app = UiApp.createApplication().setTitle('Customer Queue App'); 
    var ss = SpreadsheetApp.openById("0AnqS---------loZ0NFZGc"); 
    app.add(app.createLabel(new Date()).setId("label")) 
    var mypannel = app.createHorizontalPanel(); 
    var mypannel = app.createHorizontalPanel(); 

    var nv11 = ss.getRange("a2").getValue(); 
    var nv12 = ss.getRange("b2").getValue(); 
    var nv13 = ss.getRange("c2").getValue(); 
    var nv14 = ss.getRange("d2").getValue(); 
    var nv15 = ss.getRange("e2").getValue(); 
    var nv16 = ss.getRange("f2").getValue(); 
    var nv17 = ss.getRange("g2").getValue(); 
    var nv21 = ss.getRange("a3").getValue(); 
    var nv22 = ss.getRange("b3").getValue(); 
    var nv23 = ss.getRange("c3").getValue(); 
    var nv24 = ss.getRange("d3").getValue(); 
    var nv25 = ss.getRange("e3").getValue(); 
    var nv26 = ss.getRange("f3").getValue(); 
    var nv27 = ss.getRange("g3").getValue(); 

    var mygrid = app.createGrid(5, 7).setId("grid"); 

    mygrid.setWidget(0, 0, app.createLabel(nv12).setId('nv12').setStyleAttribute("font-size","16pt")); 
    mygrid.setWidget(0, 1, app.createLabel(nv13).setId('nv13').setStyleAttribute("font-size","16pt")); 
    mygrid.setWidget(0, 2, app.createLabel(nv14).setId('nv14').setStyleAttribute("font-size","16pt")); 
    mygrid.setWidget(0, 3, app.createLabel(nv15).setId('nv15').setStyleAttribute("font-size","16pt")); 
    mygrid.setWidget(0, 4, app.createLabel(nv16).setId('nv16').setStyleAttribute("font-size","16pt")); 
    mygrid.setWidget(0, 5, app.createLabel(nv17).setId('nv17').setStyleAttribute("font-size","16pt")); 
    mygrid.setWidget(0, 6, app.createButton("Clear Customer").setId("cc1").setStyleAttribute("font-size","16pt")); 
    mygrid.setWidget(1, 0, app.createLabel(nv22).setId('nv22').setStyleAttribute("font-size","16pt")); 
    mygrid.setWidget(1, 1, app.createLabel(nv23).setId('nv23').setStyleAttribute("font-size","16pt")); 
    mygrid.setWidget(1, 2, app.createLabel(nv24).setId('nv24').setStyleAttribute("font-size","16pt")); 
    mygrid.setWidget(1, 3, app.createLabel(nv25).setId('nv25').setStyleAttribute("font-size","16pt")); 
    mygrid.setWidget(1, 4, app.createLabel(nv26).setId('nv26').setStyleAttribute("font-size","16pt")); 
    mygrid.setWidget(1, 5, app.createLabel(nv27).setId('nv27').setStyleAttribute("font-size","16pt")); 
    mygrid.setWidget(1, 6, app.createButton("Clear Customer").setId("cc2").setStyleAttribute("font-size","16pt")); 

    mygrid.setStyleAttribute("margin-top","5px"); 
    mygrid.setStyleAttribute("font-weight","bold"); 
    mygrid.setStyleAttribute("color","black"); 

    mypannel.add(mygrid); 

    app.add(mypannel); 
    app.addTimer(app.createServerHandler("update") , 1000); 
    return app; 
} 

function update(e){ 
    var app = UiApp.getActiveApplication(); 
    var ss = SpreadsheetApp.openById("0AnqSFd3iik------------RckloZ0NFZGc"); 
    var nv11 = ss.getRange("a2").getValue(); 
    var nv12 = ss.getRange("b2").getValue(); 
    var nv13 = ss.getRange("c2").getValue(); 
    var nv14 = ss.getRange("d2").getValue(); 
    var nv15 = ss.getRange("e2").getValue(); 
    var nv16 = ss.getRange("f2").getValue(); 
    var nv17 = ss.getRange("g2").getValue(); 
    var nv21 = ss.getRange("a3").getValue(); 
    var nv22 = ss.getRange("b3").getValue(); 
    var nv23 = ss.getRange("c3").getValue(); 
    var nv24 = ss.getRange("d3").getValue(); 
    var nv25 = ss.getRange("e3").getValue(); 
    var nv26 = ss.getRange("f3").getValue(); 
    var nv27 = ss.getRange("g3").getValue(); 
    app.getElementById("label").setText(new Date()); 
    app.getElementById("nv12").setText(nv12); 
    app.getElementById("nv13").setText(nv13); 
    app.getElementById("nv14").setText(nv14); 
    app.getElementById("nv15").setText(nv15); 
    app.getElementById("nv16").setText(nv16); 
    app.getElementById("nv17").setText(nv17); 
    app.getElementById("nv22").setText(nv22); 
    app.getElementById("nv23").setText(nv23); 
    app.getElementById("nv24").setText(nv24); 
    app.getElementById("nv25").setText(nv25); 
    app.getElementById("nv26").setText(nv26); 
    app.getElementById("nv27").setText(nv27); 
    app.addTimer(app.createServerHandler("update") , 1000); 
    return app; 
} 

注意:如果在可能的情況下將代碼構建在for循環中,您的代碼可能會更緊湊,更易於維護(例如,A2和G2數據位於同一行上,您可以在單個var row1=ss.getRange(2,1,1,7).getValues)中獲得該代碼,並從中循環使用row1[0][n]進行循環...等等...),但它的工作原理,它主要是一個選擇的問題;-)