从 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 ]