是否可以在 google 网络脚本中接收 Dom?
is it possible to receive Dom in google webscript?
我从 google sheet 收到一些要显示的 html 标签,但它显示为原始字符串。方法如下
Index.html
<? var BlogData = getSheetData("Blogs"); ?>
<? for(var i = 0; i < BlogData.length; i++) { ?>
<div class="text-muted text-end"><?= BlogData[i][1] ?></div>
<!-- BlogData[i][1] this should be dom but it displays as string -->
<?};?>
code.gs
function doGet(e) {
return HtmlService.createTemplateFromFile('Index').evaluate();
}
function getSheetData(sheetName) {
var ss= SpreadsheetApp.openById("1s5AHWsdfbsgfaegsdthwrthaert5ad4y4gt56355h");
var dataSheet = ss.getSheetByName(sheetName);
var dataRange = dataSheet.getDataRange();
var dataValues = dataRange.getValues();
return dataValues;
}
值来自 sheet Blogs
看起来像这样
A
B
<h1>Title </h1>
<h2>Subtitle</h2>
<p>Paragraph</p>
不幸的是,它在 Index.html
中显示为字符串
我需要将其显示为 DOM 而不是字符串
终于,我找到了解决方案。
使用 google 插值标签有点棘手,我不知道这些标签的类型。但无意中我找到了解决方案。
使用 <?= blogData[i][j] ?>
将 return html 标记原样。
然而,<?!= blogData[i][j] ?>
将 return html 格式。
使用感叹号会完全改变结果。
我将把这个作为 devoloper 正在做的事情的例子:
他创建了一个部署,因此您可以从电子表格中检索 HTML
标签,如下所示:
现在的问题是部署将结果显示为原始文本:
通过使用 App Script 提供的 HTML SCriptlets,您可以通过脚本传递值来 return 电子表格中的数据。像这样:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<div class="root">
<? const blogData = getSheetData("Blogs");?>
<div>
<? for(var i = 0; i < blogData.length; i++) { ?>
<div>
<? for (var j = 0; j < blogData[i].length; j++) { ?>
<div>
<?!= blogData[i][j] ?> // This is the solution that devoloper found
</div>
<?};?>
</div>
<?};?>
</div>
</div>
</body>
</html>
function doGet(e) {
return HtmlService
.createTemplateFromFile("index")
.evaluate()
}
function getSheetData(sheetName) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var dataSheet = ss.getSheetByName('Blogs');
var dataRange = dataSheet.getDataRange()
var dataValues = dataRange.getValues();
console.log(dataValues)
return dataValues;
}
一旦上述脚本 运行 添加到电子表格的 HTML tags
将 return 作为常规 HTML
DOM:
我从 google sheet 收到一些要显示的 html 标签,但它显示为原始字符串。方法如下
Index.html
<? var BlogData = getSheetData("Blogs"); ?>
<? for(var i = 0; i < BlogData.length; i++) { ?>
<div class="text-muted text-end"><?= BlogData[i][1] ?></div>
<!-- BlogData[i][1] this should be dom but it displays as string -->
<?};?>
code.gs
function doGet(e) {
return HtmlService.createTemplateFromFile('Index').evaluate();
}
function getSheetData(sheetName) {
var ss= SpreadsheetApp.openById("1s5AHWsdfbsgfaegsdthwrthaert5ad4y4gt56355h");
var dataSheet = ss.getSheetByName(sheetName);
var dataRange = dataSheet.getDataRange();
var dataValues = dataRange.getValues();
return dataValues;
}
值来自 sheet Blogs
看起来像这样
A | B |
---|---|
<h1>Title </h1> |
|
<h2>Subtitle</h2> |
|
<p>Paragraph</p> |
不幸的是,它在 Index.html
中显示为字符串
我需要将其显示为 DOM 而不是字符串
终于,我找到了解决方案。
使用 google 插值标签有点棘手,我不知道这些标签的类型。但无意中我找到了解决方案。
使用 <?= blogData[i][j] ?>
将 return html 标记原样。
然而,<?!= blogData[i][j] ?>
将 return html 格式。
使用感叹号会完全改变结果。
我将把这个作为 devoloper 正在做的事情的例子:
他创建了一个部署,因此您可以从电子表格中检索 HTML
标签,如下所示:
现在的问题是部署将结果显示为原始文本:
通过使用 App Script 提供的 HTML SCriptlets,您可以通过脚本传递值来 return 电子表格中的数据。像这样:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<div class="root">
<? const blogData = getSheetData("Blogs");?>
<div>
<? for(var i = 0; i < blogData.length; i++) { ?>
<div>
<? for (var j = 0; j < blogData[i].length; j++) { ?>
<div>
<?!= blogData[i][j] ?> // This is the solution that devoloper found
</div>
<?};?>
</div>
<?};?>
</div>
</div>
</body>
</html>
function doGet(e) {
return HtmlService
.createTemplateFromFile("index")
.evaluate()
}
function getSheetData(sheetName) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var dataSheet = ss.getSheetByName('Blogs');
var dataRange = dataSheet.getDataRange()
var dataValues = dataRange.getValues();
console.log(dataValues)
return dataValues;
}
一旦上述脚本 运行 添加到电子表格的 HTML tags
将 return 作为常规 HTML
DOM: