0

我想通過谷歌應用程序腳本在谷歌工作表中右側欄中使用嵌入式html。訪問工作表的單元格並將其顯示在html5 canvas元素上。我已經創建了一個Code.gs文件和一個html索引文件ahd已經成功地獲得了電子表格以生成一個右邊欄,其內容是包含Canvas元素的HTML文件。這工作使用從嵌入式HTML文件網站訪問谷歌工作表條目

function openSidebar() { 
    var html = HtmlService.createHtmlOutputFromFile('index'); 
    SpreadsheetApp.getUi().showSidebar(html); 
} 

現在我想要顯示在畫布元素上的一些電子表格單元格條目。我的第一個任務是使用此方法在側邊欄上創建一個箱形圖。我有五個單元格包含五點總結:min,Q1,Median,Q3,Max,但無法獲取canvas元素來訪問這些值。這裏是行不通:

直接訪問細胞<script> </script>標籤之間通過調用諸如範圍:

var range = statsSheet.getRange(4,4); 
var min = range.getValue(); 

因爲statsSheet是在Code.gs文件中創建它不工作。

如果兩行代碼直接在Code.gs文件中,但它們確實能夠找到單元格值,但是min不能被html文件中的代碼訪問。

我也試圖創建一個單獨的文件.GS(boxPlot.gs),並使用

<script src = "boxPlot.gs"> </script> 

導入,但仍然無法正常工作。我無法訪問變量min_this它是一個全局變量或boxPlot.gs文件中函數的返回值。

我希望探討如何實現的僞代碼的任何幫助:<html> create canvas;<script> add min which resides at cell (4,4) as text onto the canvas; </script></html>

感謝

感謝您的幫助,但我仍然有麻煩讓從Code.gs文件傳遞給變量的值index.html中的<script> </script>代碼。使用你的建議,我能夠運行doSomething()函數,但返回值無法讀入。例如在Code.gs文件中,我有 doSomething(){「Hello World 「); }

,並在HTML頁面中,我有

<script> 
     console.log(google.script.run.doSomething()); 
</script> 

這使 「未定義」 控制檯,而不是 「Hello World」 的上。 當然,我希望能夠閱讀更復雜的元素,比如表單條目,但是如果我甚至無法讀取「Hello World」返回值,複雜的任務將無法工作。任何建議將不勝感激。

+0

不要把括號放在返回值的周圍。只需使用'return「Hello World」;' –

回答

0

您必須使用google.script.run客戶端API才能夠從HTML訪問服務器端代碼。

Google Documentation - google.script.run

,或者使用將運行一個.gs服務器功能,並送達前,將內容添加到HTML腳本小程序。腳本僅在側邊欄第一次打開時運行。因此,在首次打開邊欄時,請使用scriptlet作爲初始內容。

的術語是「模板化的HTML」

Google Documentation - Templated HTML

要接收來自服務器的返回值回HTML客戶端的JavaScript,你必須使用.withSuccessHandler(name_of_function_to_receive_return)方法。

Google Documentation - withSuccessHandler Method

您正在使用的測試代碼:

google.script.run.DoSomething() 

爲了收到「回報」從服務器返回的,你必須使用withSuccessHandler()

google.script.run 
    .withSuccessHandler(functionToHandleTheReturn) 
    .DoSomething() 

<script> 
    function functionToHandleTheReturn(theReturnedValue) { 
    alert('here is the returned value: ' + theReturnedValue; 
    }; 
</script> 
+0

查看更新後的答案。 –

+0

謝謝,但我無法獲得google.script.run.DoSomething()來給出DoSomething函數的返回值。在我的更詳細的編輯帖子底部看到我的更詳細的評論。謝謝,拉里 –

+0

查看更新的答案。 –