1

我正在嘗試編寫一個腳本,該腳本使用UiApp在SpreadSheet文件中顯示行值。當SpreadSheet被另一個腳本更改時運行Google Apps腳本

這個腳本需要在SpreadSheet發生變化時更新數據。只需觸發onChange即可。

但是,SpreadSheet本身也會被另一個函數更新,並且看起來當更改是由另一個AppScript引起時,onChange不會被觸發。

是否有另一種方法來實現我所描述的?

下面的代碼,感謝

var ss = SpreadsheetApp.openById("tqwJk280I1O_yW5oNX9nLQA"); 

function doGet() { 
    var app = UiApp.createApplication(); 
    var masPanel = app.createFlowPanel().setId("panel"); 
    var number = parseInt(ss.getRange("A1").getValue()); 
    masPanel.add(app.createLabel(number)); 
    masPanel.add(app.createFlowPanel().add(app.createFormPanel() 
      .add(app.createFlowPanel() 
      .add(app.createSubmitButton("Plus!"))))); 

    app.add(masPanel); 

    return app; 
} 

function doPost() 
{ 
    var num = parseInt(ss.getRange("A1").getValue()) + 1; 
    ss.getRange("A1").setValue(num); 
} 

function onChange() 
{ 
    ss.getRange("A2").setValue("hahaha"); 
    var app = UiApp.createApplication(); 
    app.remove(app.getElementById("panel")) 
    var masPanel = app.createFlowPanel().setId("panel"); 
    var number = parseInt(ss.getRange("A1").getValue()); 
    masPanel.add(app.createLabel(number)); 
    masPanel.add(app.createFlowPanel().add(app.createFormPanel() 
      .add(app.createFlowPanel() 
      .add(app.createSubmitButton("Plus!"))))); 

    app.add(masPanel); 

    return app; 
} 

回答

2

onChange()功能不會有參考UI。例如,如果有多個擁有相同用戶界面的人打開,應該更新哪一個?

因此,解決您的問題的方法是讓您的UI代碼定期輪詢電子表格,並在電子表格發生變化時更新UI。爲此,您可以使用未記錄的addTimer()方法。 看到這個SO question & answer爲一個很好的例子

+0

非常感謝,斯里克,這個功能真的很有幫助。有關於這些功能的頁面或論壇嗎? – MikeNQ

+0

正如我所說的,addTimer還沒有記錄:)希望Google能儘快正式上線 – Srik

相關問題