你能帮我使用谷歌应用脚本将电子表格中的一行数据拉到HTML表单中吗?
我找到和正在使用的代码和 HTML 在下面进一步。
我的电子表格看起来像这样(鲍勃和玛丽还没有预订航班(:
名称、从城市到城市、航班日期 鲍勃, 亚特兰大, 东京, , 约翰, 纽约, 巴黎, 11/08/2020 玛丽, 芝加哥, 柏林, ,
在HTML中,我输入了搜索词,一个名称,它位于电子表格的第一列中。名称匹配的行应该被拉入 HTML。
这适用于鲍勃和玛丽,他们的行中没有日期。 但是,John 的行不会传递给 HTML,因为日期会导致一些问题。
我尝试了JSON.stringify和new Date((将日期传递到HTML中;但无济于事。虽然我搜索了该网站,但无法从搜索中解决。
$('#box3').val(sObj.box3);
当 sObj.box3 是电子表格中的日期时不起作用。
任何帮助将不胜感激。请注意,我对编码很陌生,提前感谢您的回复和您的理解。 我在电子表格和网络应用程序页面下面分享: 电子表格
网络应用程序
function findNeedleInHaystack(sObj) {
var sObj=sObj||{};
sObj.column=sObj.column||1;
sObj.needle=sObj.needle||22;
sObj.haystack=sObj.haystack||'Sheet1';
sObj.startrow=sObj.startrow||2;
sObj.id=sObj.id||'16q1lFaLsZEZeImlkjaQNgCaAyA3ZS0QSrEO4dn872uc';
sObj.found="No results ";
var ss=SpreadsheetApp.openById(sObj.id);
var sh=ss.getSheetByName(sObj.haystack);
var rg=sh.getRange(sObj.startrow,1,sh.getLastRow()-sObj.startrow+1,sh.getLastColumn());
var v=rg.getValues();
for(var i=0;i<v.length;i++) {
if(v[i][sObj.column-1]==sObj.needle) {
sObj.box1= v[i][sObj.column];
sObj.box2= v[i][sObj.column+1];
sObj.box3= v[i][sObj.column+2];
break;
}
}
return sObj;
}
function doGet() {
return HtmlService.createHtmlOutputFromFile('index')
.setSandboxMode(HtmlService.SandboxMode.IFRAME);
}
和 HTML:
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
</head>
<body>
<br>
<br /><input id="txt2" type="text" value="John" placeholder="Enter 'John' and hit search" />
<br><input id="box1" type="text" />
<br><input id="box2" type="text" />
<br /><input id="box3" />
<br />
<input type="button" value="Search" onClick="search();" />
<br>
<script>
function search() {
var s2=$('#txt2').val();
google.script.run
.withSuccessHandler(function(sObj){
$('#box1').val(sObj.box1);
$('#box2').val(sObj.box2);
$('#box3').val(sObj.box3);
})
.findNeedleInHaystack({needle:s2});
}
</script>
</body>
</html>
这个答案怎么样?
修改点:
- 在 Google Apps 脚本端的脚本
findNeedleInHaystack()
中,sObj.box3
日期对象。在这种情况下,当sObj
返回到 HTML 端时,它会变成null
.我认为这就是您问题的原因。
为了避免这个问题,下面修改一下怎么样?
修改后的脚本 1:
请按如下方式修改findNeedleInHaystack
。
从:
return sObj;
自:
return JSON.stringify(sObj);
另外,请按如下方式修改HTML端。
从:
google.script.run
.withSuccessHandler(function(sObj){
$('#box1').val(sObj.box1);
$('#box2').val(sObj.box2);
$('#box3').val(sObj.box3);
})
.findNeedleInHaystack({needle:s2});
自:
google.script.run
.withSuccessHandler(function(sObj){
sObj = JSON.parse(sObj) // <--- Added
$('#box1').val(sObj.box1);
$('#box2').val(sObj.box2);
$('#box3').val(sObj.box3);
})
.findNeedleInHaystack({needle:s2});
修改后的脚本 2:
在此模式中,作为简单的修改,请按如下方式修改findNeedleInHaystack
。
从:
var v=rg.getValues();
自:
var v=rg.getDisplayValues();
修改后的脚本 3:
在此修改中,日期对象将转换为字符串。请按如下方式修改findNeedleInHaystack
。
从:
sObj.box3= v[i][sObj.column+2];
自:
sObj.box3= v[i][sObj.column+2].toISOString();
引用:
- getDisplayValues((
- toISOString((
我已经尝试了好几天了。感觉好像我从迷失在山洞中解救出来,你引导我走向光明:( 感谢您的时间和帮助:( 您的建议对我来说非常有效,只是以下内容似乎在我的情况下保持不变:
sObj.box3= v[i][sObj.column+2];
很高兴得到您的帮助,再次感谢您。 此致敬意