1

我使用html代碼創建儀表板,用戶可以選擇一個日期,然後根據選定的日期從遠程API獲取一些值,然後在表格中顯示這些值。應用程序腳本不會更新Google電子表格單元格值始終

我的html文件是這樣的:

<!DOCTYPE html> 
<html> 
<head> 
<link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css"> 
    <script src="//code.jquery.com/jquery-1.10.2.js"></script> 
    <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script> 
    <link rel="stylesheet" href="/resources/demos/style.css"> 
    <script> 
    $(function() { 
    $("#datepicker").datepicker(); 
    }); 
    </script> 

</head> 
<body> 
<form> 
<select name="Student" id="category"> 

<option value="" selected="selected">Select Student</option> 

<option value="Abercrombie, Amber">Abercrombie, Amber(Gr 11)</option> 
<option value="Yupa, Jason">Yupa, Jason(Gr 9)</option> 
</select> 
Date: <input type="text" id="datepicker" name="datepicker"> 
<input type="submit" value="Submit" onclick="myFunction()"> 
</form> 

<p id="demo"></p> 
<script> 
function myFunction() { 
    var x = document.getElementById("category").value; 
    var x2 = document.getElementById("datepicker").value; 
//document.getElementById("demo").innerHTML = x; 

    google.script.run.functionToRunOnFormSubmit(x, x2); 
    google.script.host.close(); 

} 
</script> 

</body> 
</html> 

我code.gs如下:

function fncOpenMyDialog() { 
    //Open a dialog 

    var htmlDlg = HtmlService.createHtmlOutputFromFile('HTML_myHtml') 
     .setSandboxMode(HtmlService.SandboxMode.IFRAME) 
     .setWidth(500) 
     .setHeight(300); 
    SpreadsheetApp.getUi() 
     .showModalDialog(htmlDlg, 'Dashboard'); 


}; 

function functionToRunOnFormSubmit(fromInputForm, datevalue) { 
    Logger.log(fromInputForm); 
    Logger.log(datevalue); 
    SpreadsheetApp.getActiveSheet().getRange('B3').setValue(fromInputForm); 
    SpreadsheetApp.getActiveSheet().getRange('B4').setValue(datevalue); 
}; 

當我選擇從腳本編輯器功能(fncOpenMyDialog()),它創建電子表格上的儀表板,我可以在其中選擇日期,但在functionToRunOnFormSubmit函數中,我正在記錄參數,然後相應地設置B3和B4單元格值。它沒有得到更新也沒有得到登錄腳本編輯器。

+1

其不正確的關閉對話框,而無需等待前一個調用來完成。 –

+0

@ZigMandel好的,你可以指點我的方法文檔,我該如何等待第一個電話完成。 – ashishk

+1

google for google.script.run –

回答

2

問題是你在調用google.script.run函數後調用「close」,這是一個異步的ajax調用。

在某些情況下,它甚至可能不會讓瀏覽器有足夠的時間來啓動ajax調用,或者因爲頁面正在關閉而被取消。所以有時候它可能會到達後端腳本,有時會通過。

看看文檔和同時處理成功(從那裏關閉對話框)和失敗(顯示錯誤給用戶)

https://developers.google.com/apps-script/guides/html/reference/run

雖然文檔犯規明確地表現出來,你可以連接兩個要求是這樣的:

google.script.run.withFailureHandler(onFailure).withSuccessHandler(onSuccess).yourCall();

相關問題