如何将单元格中的日期从电子表格提取到我的 HTML



你能帮我使用谷歌应用脚本将电子表格中的一行数据拉到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];

很高兴得到您的帮助,再次感谢您。 此致敬意

相关内容

最新更新