google.script.run 在一张纸上工作,在另一张纸上不起作用

问题描述 投票:0回答:1

我有一个大型 Google Sheets 项目,我正在尝试向其中添加打开模式对话框并将信息发送回工作表的功能。我遇到的奇怪问题是,在我的主项目中它不起作用,但在新项目中完全相同的代码却可以正常工作。

在这两种情况下,现在为了测试,我正在调用从宏打开对话框的函数:

function TestMacro() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('A1').activate();

  var brokenParts = ["4wfecS", "5few4s", "f5aews"];
  OpenAddCatalog(brokenParts);
};

然后是Code.gs文件中的代码:

// this function opens the dialog for adding new parts to the catalog
function OpenAddCatalog(brokenParts){
  var templ = HtmlService.createTemplateFromFile('AddCatalog');
  templ.firstName = "test";
  templ.partData = brokenParts;
  var message = templ.evaluate().getContent();
  SpreadsheetApp.getUi().showModalDialog(HtmlService.createHtmlOutput(message).setWidth(810).setHeight(150),"Add Parts To Catalog");
}

// this is the function called from the script in the html file
function AddToCatalog(inp){
  return "from MasterSheet" + inp;   // this is just to test if I'm getting a return from this function
}

然后这是 HTML 文件(忽略这里的其他功能不完整,我仍在研究它。要点是在我的测试电子表格中有效的内容在我的主电子表格中无效):

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <script>

      function SubmitCatalog(idNum)
      {
        document.getElementById("displayCatalog").innerHTML = "<span style=\"font-weight: bold\" >" + idNum + "</span>";
        google.script.run.withSuccessHandler(Test).AddToCatalog(idNum);
      }

      function Test(ret){
        document.getElementById("displayCatalog2").innerHTML = "<span style=\"font-weight: bold\" >" + ret + "</span>";
      }

    </script>
  </head>
  <body>
    <div id="AddCatalog" >
      <?= firstName ?>
    <table style="height: 54px; width: 700px;" border="0" cellspacing="0" cellpadding="1"><colgroup><col width="100" /><col width="100" /><col width="500" /><col width="100" /></colgroup>
      <tbody>
        <tr bgcolor="#434343">
          <td style="text-align: left;"><span style="color: #ffffff;">&nbsp;Part #</span></td>
          <td style="text-align: left;"><span style="color: #ffffff;">&nbsp;MFG</span></td>
          <td style="text-align: left;"><span style="color: #ffffff;">&nbsp;Description</span></td>
          <td style="text-align: left;"><span style="color: #ffffff;">&nbsp;Submit</span></td>
        </tr>
        <tr>
          <td style="text-align: left;"><input id="partNoCat" size="10" type="text" /></td>
          <td style="text-align: left;"><input id="mfg" size="5" type="text" /></td>
          <td style="text-align: left;"><input id="desc" size="40" type="text" /></td>
          <td style="text-align: left;"><input type="button" value="Submit" onclick="SubmitCatalog(555)"/></td>
        </tr>
        <? for(var i = 0; i < (partData.length); i++) { ?>
          <tr >
            <td style="text-align: left;"><input id="partNoCat" size="10" type="text" /></td>
            <td style="text-align: left;"><input id="mfg" size="5" type="text" /></td>
            <td style="text-align: left;"><input id="desc" size="60" type="text" /></td>
            <td style="text-align: left;"><input id="Submit" type="button" value="Submit" onclick="SubmitCatalog()"/></td>
            <script>
              document.getElementById("partNoCat").id = "partNoCat" + <?= i ?>;
              document.getElementById("partNoCat").value = <?= partData[i] ?>;
              document.getElementById("mfg").id = "mfg" + <?= i ?>;
              document.getElementById("desc").id = "desc" + <?= i ?>;
              document.getElementById("Submit").setAttribute("onclick", <?= "SubmitCatalog(" + i + ")" ?>);
            </script>
          </tr>
        <? } ?>
      </tbody>
    </table>
      
    <table style="height: 54px; width: 800px;" border="0" cellspacing="0" cellpadding="1"><colgroup><col width="100" /><col width="350" /><col width="350" /></colgroup>
    <tbody>
        <tr>
          <td style="text-align: left;"><input type="button" value="Submit" onclick="SubmitCatalog()"/></td>
          <td style="text-align: left;"><div id="displayCatalog" >disp here</div></td>
          <td style="text-align: left;"><div id="displayCatalog2" >disp2 here</div></td>
        </tr>
      </tbody>
    </table>
    </div>

  </body>
</html>

希望有人能阐明这一点,因为我很困惑。

javascript html google-apps-script google-sheets modal-dialog
1个回答
0
投票

这对我有用,包括在服务器代码中将 idNum 发送到 AddToCatalog() :

gs:

function TestMacro() {
  var brokenParts = ["4wfecS", "5few4s", "f5aews"];
  OpenAddCatalog(brokenParts);
}

function OpenAddCatalog(brokenParts){
  var templ = HtmlService.createTemplateFromFile('ah5');
  templ.firstName = "test";
  templ.partData = brokenParts;
  var message = templ.evaluate().getContent();
  SpreadsheetApp.getUi().showModalDialog(HtmlService.createHtmlOutput(message).setWidth(1200).setHeight(150),"Add Parts To Catalog");
}

function AddToCatalog(inp){
  Logger.log("Server AddToCatalog")
  Logger.log(inp)
}

html:

<!DOCTYPE html>
<html>
<head>
    <base target="_top">
    <script>
      function SubmitCatalog(idNum){
        console.log(idNum);
        document.getElementById("displayCatalog").innerHTML = "<span style=\"font-weight: bold\" >" + idNum + "</span>";
        google.script.run.withSuccessHandler(Test).AddToCatalog(idNum);
      }

      function Test(ret){
        document.getElementById("displayCatalog2").innerHTML = "<span style=\"font-weight: bold\" >" + ret + "</span>";
      }
    </script>
  </head>
  <body>
    <div id="AddCatalog" >
      <?= firstName ?>
    <table>
        <tr bgcolor="#434343">
          <td style="text-align: left;"><span style="color: #ffffff;">&nbsp;Part #</span></td>
          <td style="text-align: left;"><span style="color: #ffffff;">&nbsp;MFG</span></td>
          <td style="text-align: left;"><span style="color: #ffffff;">&nbsp;Description</span></td>
          <td style="text-align: left;"><span style="color: #ffffff;">&nbsp;Submit</span></td>
        </tr>
        <tr>
          <td style="text-align: left;"><input id="partNoCat" size="10" type="text" /></td>
          <td style="text-align: left;"><input id="mfg" size="5" type="text" /></td>
          <td style="text-align: left;"><input id="desc" size="40" type="text" /></td>
          <td style="text-align: left;"><input type="button" value="Submit" onclick="SubmitCatalog(555)"/></td>
        </tr>
        <? for(var i = 0; i < (partData.length); i++) { ?>
          <tr >
            <td style="text-align: left;"><input id="partNoCat" size="10" type="text" /></td>
            <td style="text-align: left;"><input id="mfg" size="5" type="text" /></td>
            <td style="text-align: left;"><input id="desc" size="60" type="text" /></td>
            <td style="text-align: left;"><input id="S-<?= i ?>" type="button" value="Submit" onclick="SubmitCatalog()"/></td>
            <script>
              document.getElementById("partNoCat").id = "partNoCat" + <?= i ?>;
              document.getElementById("partNoCat").value = <?= partData[i] ?>;
              document.getElementById("mfg").id = "mfg" + <?= i ?>;
              document.getElementById("desc").id = "desc" + <?= i ?>;
              document.getElementById("S-<?= i ?>").setAttribute("onclick","SubmitCatalog("  + <?= i ?> + ")");
            </script>
          </tr>
        <? } ?>
    </table>
      
    <table style="height: 54px; width: 800px;" border="0" cellspacing="0" cellpadding="1"><colgroup><col width="100" /><col width="350" /><col width="350" /></colgroup>
    <tbody>
        <tr>
          <td style="text-align: left;"><input type="button" value="Submit" onclick="SubmitCatalog(111)"/></td>
          <td style="text-align: left;"><div id="displayCatalog" >disp here</div></td>
          <td style="text-align: left;"><div id="displayCatalog2" >disp2 here</div></td>
        </tr>
      </tbody>
    </table>
    </div>

  </body>
</html>
© www.soinside.com 2019 - 2024. All rights reserved.