搜尋

首頁  >  問答  >  主體

從伺服器到GAS:資料傳遞的途徑

我有一個用於網頁應用的函數,可以複製模板,它接收模板的名稱和模板的id作為參數。

程式碼.gs

#函數generate_(idTemplate, 名稱) {

var template = DriveApp.getFileById(idTemplate);
 var folder = '文件夹id';

var copyName = name + "-" + CurrentDate;// 添加创建日期
  var copy;
  try {
    copy = template.makeCopy(copyName, folder);
  } catch (e) {
    Logger.log(e.stack);
  }
var nameF = copy.getName();
var linkF = copy.getUrl()
Logger.log(nameF,linkF)
  return getFile(nameF,linkF) // 这些值是我想要传递给客户端的。
}

這個函數是我用來將複製的名稱和URL傳遞給客戶端的。我知道在JavaScript中要傳回多個參數,必須透過陣列來實現。

function getFile(nameF,linkF){
var array = [nameF,linkF];
return array;
}

這是我用來嘗試檢索產生的複製資料的客戶端腳本:

HTML

<script>
        function getValues(){
          google.script.run.withSuccessHandler(copyValues).getFile();
        }
        function copyValues(values){
         
          var nameF = values[0];
          var urlF = values[1];
        console.log(values);
         console.log(nameF);
          console.log(urlF);
          console.log("值成功传递了");
        }
    </script>

我使用一個按鈕來測試是否正確傳遞,但是我無法顯示這些數據,瀏覽器控制台顯示日誌時顯示null。

我可能做錯了什麼?在客戶端我已經嘗試了google.script.run.withSuccessHandler(copyValues).getFile(nameF,linkF);,但沒有運作。

<button id="btn" onclick="create(); getValues();"

這是按鈕,它觸發了create(),用於建立複製的腳本,以及getValues();,用於取得該複製的名稱和URL。模板複製成功創建,但文件名和URL未在客戶端檢索。

P粉141911244P粉141911244475 天前602

全部回覆(2)我來回復

  • P粉147045274

    P粉1470452742023-09-19 13:18:54

    試試這個:

    GS:

    function launchmydialog() {
      let t = HtmlService.createTemplateFromFile("ah2");
      t.t1 = "one";
      t.t2 = "two";
      SpreadsheetApp.getUi().showModelessDialog(t.evaluate(),"Dialog");
    }

    HTML:

    <!DOCTYPE html>
    <html>
    <head>
      <base target="_top">
    </head>
    <body>
        <input type="text" id="txt1" name="text1" value="" /><br>
        <input type="text" id="txt2" name="text2" value="" /><br>
    </body>
    </html>

    Dialog:

    回覆
    0
  • P粉951914381

    P粉9519143812023-09-19 10:15:01

    這是一個獲取文件資訊的範例。

    如下截圖所示,當我點擊按鈕時,檔案名稱和URL將顯示在輸入框中。

    Code.gs

    #
    function showTest() {
      setFileInfo();
      let html = HtmlService.createHtmlOutputFromFile("HTML_Test");
      SpreadsheetApp.getUi().showModalDialog(html,"Test");
    }
    
    function setFileInfo() {
      let id = "1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxE";
      let name = "Copy of Template";
      let template = DriveApp.getFileById(id);
      let copy = template.makeCopy(name);
    
      let properties = PropertiesService.getDocumentProperties();
      let property = [copy.getName(),copy.getUrl()];
      properties.setProperty("FileInfo",JSON.stringify(property));
    }
    
    function getFileInfo() {
      let properties = PropertiesService.getDocumentProperties();
      let property = properties.getProperty("FileInfo");
      if( property ) {
        return JSON.parse(property);
      }
      return "Error";
    }

    HTML_Test.html

    <!DOCTYPE html>
    <html>
      <head>
      </head>
      <body>
        <input id="getFileInfoButton" type="button" onclick="getFileInfoClicked()" value="获取文件信息"><br>
        <input id="getFileInfoText" type="text">
        <script>
          function getFileInfoClicked() {
            try {
              google.script.run.withSuccessHandler( 
                function (value) {
                  document.getElementById("getFileInfoText").value = value;
                }
              ).getFileInfo();
            }
            catch(err) {
              alert(err);
            }
          }
        </script>
      </body>
    </html>

    回覆
    0
  • 取消回覆