簡體   English   中英

HTML Google 表格 google.script.run 中的對話框。 無法運行 Apps 腳本 function

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM