我在使用Google Apps脚本的电子表格插件中收到了以下对象:
功能:
function collectAllData(){
var sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName(DATA);
var fileData = sheet.getDataRange().getValues();
Logger.log(fileData);
return fileData;
}
收到的对象:
[[File ID 1, File Name 1, File Type 1, File Category 1, File Image 1, File Description 1], [File ID 2, File Name 2, File Type 2, File Category 2, File Image 2, File Description 2], ...]
我需要将此对象转换为HTML模板中的以下对象
<script>
try {
var file_data = ({
'File ID 1':{
id:"File ID 1",
name:"File Name 1",
type:"File Type 1"
cat:"File Category 1",
desc:"File Description 1",
img:"File Image 1"
},
'File ID 2':{
id:"File ID 2",
name:"File Name 2",
type:"File Type 2"
cat:"File Category 2",
desc:"File Description 2",
img:"File Image 2"
}
});
} catch(e) {
var file_data = null;
}
</script>
有没有正确的方法在我的Code.gs
做这个,然后传递给template.html
?
我目前正在我的template.html
建立这个,但我相信有更好的方法来做到这一点。此外,我经常收到以下错误:SyntaxError: missing } after property list
这是我目前的template.html
代码
<script>
try {
var file_data = ({
<? for (var i=1; i<fileData.length; i++){
var x = i < fileData.length-1 ? ',' : ''; ?>
'<?!= fileData[i][8] ?>':{
id:"<?!= fileData[i][8] ?>",
title:"<?!= fileData[i][0] ?>",
ext:"<?!= fileData[i][1] ?>",
cat:"<?!= fileData[i][2] ?>",
cost:"<?!= fileData[i][3] ?>",
desc:'<?!= fileData[i][4] ?>',
img:"<?!= fileData[i][5] ?>",
url:"<?!= fileData[i][6] ?>",
status:"<?!= fileData[i][7] ?>"
}<?!= x;
}?>
});
} catch(err) {
var file_data = null;
}
</script>
您可以轻松地对数据进行字符串化并将其发送到client1并解析客户端。
服务器端:
function collectAllData(){
.
.
return JSON.stringify(fileData);
}
客户端:
<script>
var file_data={};
google.script.run
.withSuccessHandler(parseArray)
.collectAllData();
function parseArray(arr){
arr = JSON.parse(arr);
arr.forEach((row)=>{
file_data[row[0]] ={
id:row[0],
name:row[1],
type:row[2],
cat:row[3],
desc:row[5],
img:row[4]
}
})
console.log(file_data);
}
</script>
您还可以执行解析服务器端并传递字符串化的解析对象。
略有不同的方法:
HTML:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<script>
window.onload=function(){
google.script.run
.withSuccessHander(fileData){
for(var i=0;i<fileData.length;i++) {
{
var file_dataA.push({id:fileData[i][8],title:fileData[i][0],ext:fileData[i][1],cat:fileData[i][2],cost:fileData[i][3],desc:fileData[i][4],img:fileData[i][5],url:fileData[i][6],status:fileData[i][7]});
}
}
.collectAllData();
</script>
<body>
</body>
</html>
您还可以使用JQuery ready函数。
GS:
function collectAllData(){
var sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName(DATA);
var fileData = sheet.getDataRange().getValues();
return fileData;
}
我经常在服务器端构建html并将其作为字符串传递给客户端,然后使用$("#id").html()
或getElementById().innerHTML=
加载到div中