从 Google Apps 脚本和 javascript/jQuery 中的另一个对象或数组构建对象
Build object from another object or array in Google Apps Script and javascript/jQuery
我在我的电子表格插件中使用 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>
您可以轻松地将数据字符串化并将其发送到客户端1并在客户端解析它。
片段:
服务器端:
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 就绪功能。
gs:
function collectAllData(){
var sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName(DATA);
var fileData = sheet.getDataRange().getValues();
return fileData;
}
我经常在服务器端构建 html 并将其作为字符串传递给客户端,然后使用 $("#id").html()
或 [=13= 加载到 div ]
我在我的电子表格插件中使用 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>
您可以轻松地将数据字符串化并将其发送到客户端1并在客户端解析它。
片段:
服务器端:
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 就绪功能。
gs:
function collectAllData(){
var sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName(DATA);
var fileData = sheet.getDataRange().getValues();
return fileData;
}
我经常在服务器端构建 html 并将其作为字符串传递给客户端,然后使用 $("#id").html()
或 [=13= 加载到 div ]