Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从google脚本的不同功能加载多个HTML_Html_Google Apps Script - Fatal编程技术网

如何从google脚本的不同功能加载多个HTML

如何从google脚本的不同功能加载多个HTML,html,google-apps-script,Html,Google Apps Script,我有一个场景,在这个场景中,我从doGet函数加载一个“first”html,然后在这个html中我调用googlescript函数,在这里我获取一些地理代码,然后从这个函数中,我想加载不同的html文件和一些值。我尝试了一些东西,但对我来说不起作用。我的谷歌脚本如下所示 function doGet(e) { Logger.log(e) var htmlTemplate = HtmlService.createTemplateFromFile('first'); var htmlO

我有一个场景,在这个场景中,我从doGet函数加载一个“first”html,然后在这个html中我调用googlescript函数,在这里我获取一些地理代码,然后从这个函数中,我想加载不同的html文件和一些值。我尝试了一些东西,但对我来说不起作用。我的谷歌脚本如下所示

function doGet(e) {
  Logger.log(e)
  var htmlTemplate = HtmlService.createTemplateFromFile('first');
  var htmlOutput = htmlTemplate.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME);
  Logger.log('htmlOutput loaded')
  return htmlOutput;
}
function extractGeoCodes(excelRows){
    var latlng_arr = []
    for (var i = 0; i < excelRows.length; i++) {
    var add = excelRows[i]['Address']
    var geocoder = Maps.newGeocoder().geocode(add);
    latlng_arr.push(geocoder.results[0].geometry.location)
    Utilities.sleep(200);
    }
    var htmlTemplate = HtmlService.createTemplateFromFile('second');
    htmlTemplate.latlng_arr = latlng_arr;
    var htmlOutput = htmlTemplate.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME);
    Logger.log('second htmlOutput loaded')
    return htmlOutput;
}
函数doGet(e){
Logger.log(e)
var htmlTemplate=HtmlService.createTemplateFromFile('first');
var htmlOutput=htmlTemplate.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME);
Logger.log('htmlOutput-loaded')
返回htmlOutput;
}
函数提取地理代码(excelRows){
var latlng_arr=[]
对于(变量i=0;i
我的“第一个”html看起来与下面类似

<!DOCTYPE html>
<html>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.8.0/jszip.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.8.0/xlsx.js"></script>
    ></script>
<script>
    function Upload() {
        //This function uploads xlsx file and pass content to ProcessExcel
    };
    function ProcessExcel(data) {
        var workbook = XLSX.read(data, {
            type: 'binary'
        });
        var firstSheet = workbook.SheetNames[0];
        var excelRows = XLSX.utils.sheet_to_row_object_array(workbook.Sheets[firstSheet]);
        var latlng_data = google.script.run.extractGeoCodes(excelRows) //this calls google script function
    };
</script>
<body>

<p>Click on the "Choose File" button to upload a file:</p>
<input type="file" id="fileUpload" />
<input type="button" id="upload" value="Upload" onclick="Upload()" />
<hr />
<div id="dvExcel"></div>


</body>
</html>

>
函数上传(){
//此函数用于上载xlsx文件并将内容传递给ProcessExcel
};
函数ProcessExcel(数据){
变量工作簿=XLSX.read(数据{
键入:“二进制”
});
var firstSheet=workbook.SheetNames[0];
var excelRows=XLSX.utils.sheet_到_row_object_数组(workbook.Sheets[firstSheet]);
var latlng_data=google.script.run.extractGeoCodes(excelRows)//这将调用google脚本函数
};
单击“选择文件”按钮上载文件:


第二个html是

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <script type="text/javascript">
      var name = '<?= latlng_arr ?>';
    </script>
  </head>
  <body onload=>
    <h1>Hello World, from Google cloud</h1>
    <div>
      <label>Value from latlong array = </label>
      <span><?= latlng_arr ?></span>
      <!-- we use the value from the variable which was set in the template in google script -->
    </div>
  </body>
</html>

变量名=“”;
你好,来自谷歌云
latlong数组中的值=

我可以看到日志“second htmlOutput loaded”(第二次加载htmlOutput),但html没有加载它,它卡在了“first”(第一次)。如何处理这种情况?

您可以使用
.withSuccessHandler()
附加到页面的一部分,或者使用
document.write()
清除整个文档。由于要将html添加为字符串,因此应在
HtmlOutput
上使用:

  • 返回字符串:
  • Html(“第二个”):

变量名=“”;
你好,来自谷歌云
latlong数组中的值=
  • 第一个html处理字符串html:
函数addHtml(html){
document.querySelector(“body”).insertAdjacentHTML('beforeend',html)
}
google.script.run.withSuccessHandler(addHtml).extractGeoCodes(excelRows)//这将调用google脚本函数

您的html?
@TheMaster这两个html文件都有问题。使用querystring参数告诉doGet()返回哪个页面
function extractGeoCodes(excelRows){
/*...*/
return htmlOutput.getContent();
}