在Google Apps脚本和javascript / jQuery中从另一个对象或数组构建对象

问题描述 投票:0回答:2

我在使用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>
google-apps-script google-apps-script-addon
2个回答
1
投票

您可以轻松地对数据进行字符串化并将其发送到client1并解析客户端。

Snippet:

服务器端:

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>

您还可以执行解析服务器端并传递字符串化的解析对象。


0
投票

略有不同的方法:

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中

© www.soinside.com 2019 - 2024. All rights reserved.