Vom Server zum GAS: der Weg der Datenübertragung
P粉141911244
P粉141911244 2023-09-18 23:38:40
0
2
586

Ich habe eine Funktion für eine Webanwendung, die eine Vorlage kopiert. Sie erhält den Namen der Vorlage und die ID der Vorlage als Parameter.

code.gs

Funktion generic_(idTemplate, name) {

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) // 这些值是我想要传递给客户端的。
}

Diese Funktion verwende ich, um den kopierten Namen und die URL an den Client zu übergeben. Ich weiß, dass in JavaScript die Rückgabe mehrerer Parameter über ein Array implementiert werden muss.

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

Dies ist das Client-Skript, mit dem ich versuche, die generierten replizierten Daten abzurufen:

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>

Ich verwende eine Schaltfläche, um zu testen, ob es korrekt übergeben wird, aber ich kann die Daten nicht anzeigen, die Browserkonsole zeigt beim Anzeigen des Protokolls Null an.

Was könnte ich falsch gemacht haben? Auf der Client-Seite habe ich es versucht google.script.run.withSuccessHandler(copyValues).getFile(nameF,linkF);, aber es hat nicht funktioniert.

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

Dies ist die Schaltfläche, die ausgelöst wird create(),用于创建复制的脚本,以及getValues();, um den Namen und die URL dieser Kopie abzurufen. Die Vorlagenkopie wurde erfolgreich erstellt, der Dateiname und die URL werden jedoch nicht auf dem Client abgerufen.

P粉141911244
P粉141911244

Antworte allen(2)
P粉147045274

试试这个:

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="= t1 ?>" /><br>
    <input type="text" id="txt2" name="text2" value="= t2 ?>" /><br>
</body>
</html>

Dialog:

P粉951914381

这是一个获取文件信息的示例。

如下截图所示,当我点击按钮时,文件名和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>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage