如何从google脚本的不同功能加载多个HTML
我有一个场景,在这个场景中,我从doGet函数加载一个“first”html,然后在这个html中我调用googlescript函数,在这里我获取一些地理代码,然后从这个函数中,我想加载不同的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
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();
}