[英]HTML Dialog in Google Sheets google.script.run. fails to run Apps Script function
我正在使用 Google 表格與一位年長的朋友進行遠程游戲(經游戲發行商許可)。
我正在嘗試使用帶有按鈕的 HTML 對話框來觸發一些腳本。 我已經完成了我可以在文檔和 Yagisanatode 的博客中找到的所有示例。 除了google.script.run.addEgg()
沒有觸發 Code.gs 中的addEgg()
function 之外,這一切都有效。
我包括相關的代碼位。 在進一步構建之前,我正在努力讓一個按鈕觸發一個腳本。
EggFoodTuck01()
,通過單擊ObjectOverGrid
觸發,成功啟動對話框
function EggFoodTuck01(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.setActiveSheet(ss.getSheetByName('Decks'));
sheet.getRange('CurrentCard').setValue(0); // Record Card Number in 'CurrentCard' Cell (0-14)
sheet.getRange('CurrentSheet').setValue('Player 1'); // Record Sheet Name in 'CurrentSheet'
// Launch dialog
var html = HtmlService.createHtmlOutputFromFile("EFTDialog");
ui.showModalDialog(html, "What would you like to do?");
}
HTML 對話框正確顯示。 單擊 [+ Egg] 按鈕會啟動actionAddEgg()
,因為對話框會關閉。 無論出於何種原因, addEgg()
都沒有在我的 Apps 腳本中運行。
<!DOCTYPE html>
<html>
<head>
<base target="_top">
<link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons1.css">
</head>
<body>
<div>
<br>
<br>
<input type="button" value="+ 🥚" class="share" onclick="addEgg()" />
<br>
<br>
<input type="button" value="Cancel" class="action" onclick="google.script.host.close()" />
</div>
<script>
function addEgg(){
google.script.run.addEgg();
google.script.host.close();
}
</script>
</body>
</html>
這是 Apps 腳本中的addEgg()
。 它根本沒有運行。 'card' 變量甚至不會記錄。
function addEgg(){
// Get card and sheet data
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.setActiveSheet(ss.getSheetByName('Decks'));
var card = sheet.getRange('CurrentCard').getValue();
var sheetname = sheet.getRange('CurrentSheet').getValue();
var sheet = SpreadsheetApp.setActiveSheet(ss.getSheetByName(sheetname));
// Get current egg value and +1
var eggCell = ['F7','M7','T7','AA7','AH7','F16','M16','T16','AA16','AH16','F25','M25','T25','AA25','AH25'];
var egg = sheet.getRange(eggCell[card]).getValue();
sheet.getRange(eggCell[card]).setValue(egg + 1);
}
你錯過了google.script.run
是異步的。 這意味着google.script.host.close()
可能在google.script.run.addEgg()
調用被有效執行之前執行。
一種選擇是您使用withSuccessHandler
調用google.script.host.close()
您缺少的另一件事是google.script.run
將使用用於登錄 Google 服務的默認帳戶執行。 一種快速的解決方案是與您的默認帳戶共享您的電子表格。
有關的
您不應該對服務器和客戶端腳本函數使用相同的 function 名稱 ( addEgg
)。 考慮更改其中一個函數的名稱。
在successHandler
中使用close
因為google.script.run
是異步的。 這個答案中提到了這一點
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.