![](/img/trans.png)
[英]How can i load data from a spreadsheet to an html using google apps script?
[英]Using Google Apps Script, can we display a data in the HTML page as soon as somebody enters that data into Google spreadsheet?
使用 Google Apps 脚本,一旦有人将数据输入 Google 电子表格,如何在 HTML 页面(不刷新页面)中显示数据?
我编写了以下代码,它呈现了电子表格中存在的所有数据。 但是我无法在不需要刷新页面的情况下添加动态呈现数据的功能。
索引.html
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<h1>Hello world</h1>
<? for(var i=0; i<list.length; i++){ ?>
<h3><?= list[i] ?></h3>
<? } ?>
</body>
</html>
代码.gs
var ss = SpreadsheetApp.getActiveSpreadsheet();
function doGet() {
var ws = ss.getSheetByName('list');
var lastRow = ws.getLastRow();
var numRow = lastRow - 1;
var vals = ws.getRange(2,1,numRow,2).getValues();
var temp = HtmlService.createTemplateFromFile('index');
temp.list = vals;
return temp.evaluate();
}
电子表格
我相信你的目标如下。
<h3><?= list[i]?></h3>
。不幸的是,在当前阶段,如果不重新加载 Web 应用程序页面,则无法从 Google Apps 脚本端直接更新 HTML 端。 所以在这种情况下,需要从Javascript侧刷新页面中的HTML。
在这个答案中,作为一种解决方法,我想使用setInterval
刷新 H3 的标签。 当此解决方法反映到您的脚本时,它变为如下。
请按如下方式修改您的 Google Apps 脚本和 HTML&Javascript。 以下修改脚本用于 Web 应用程序时,当用浏览器打开 Web 应用程序页面时,“H3”的值每 5 秒自动刷新一次。
Code.gs
):function 分为以下 2 个功能。
function doGet() {
var temp = HtmlService.createTemplateFromFile('index');
temp.list = getValues();
return temp.evaluate();
}
function getValues() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ws = ss.getSheetByName('list');
var lastRow = ws.getLastRow();
var numRow = lastRow - 1;
return ws.getRange(2,1,numRow,2).getValues();
}
index.html
):<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<h1>Hello world</h1>
<div id="sample">
<? for(var i=0; i<list.length; i++){ ?>
<h3><?= list[i] ?></h3>
<? } ?>
</div>
</body>
<script>
function main() {
google.script.run.withSuccessHandler(v => {
const div = document.getElementById('sample');
const value = [...div.children].map(e => e.innerHTML);
if (value.length != v.length || value.some((e, i) => e != v[i].join(","))) {
while(div.firstChild) div.removeChild(div.firstChild);
v.forEach(e => {
const h3 = document.createElement("h3");
h3.innerHTML = e.join(",");
div.appendChild(h3);
});
}
}).getValues();
}
setInterval(main, 5000); // In this sample, the tags of H3 are refreshed every 5 seconds.
</script>
</html>
H3
的标签。 main
function 每 5 秒运行一次。 当H3
的现有值与当前电子表格的值不同时,更新H3
的值。 当H3
的现有值与当前电子表格的值相同时,不更新H3
的值。google.script.run
,因为您使用的是模板 HTML。 我认为您还可以使用 Javascript 的fetch
从电子表格中检索值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.