Google apps script 从Google应用程序脚本和javascript/jQuery中的另一个对象或数组构建对象

Google apps script 从Google应用程序脚本和javascript/jQuery中的另一个对象或数组构建对象,google-apps-script,google-apps-script-addon,Google Apps Script,Google Apps Script Addon,我正在使用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, F

我正在使用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], ...]
收到的对象:

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>

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

片段: 服务器端:

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>

var file_data={};
google.script.run
.withSuccessHandler(parseArray)
.collectAllData();
函数数组(arr){
arr=JSON.parse(arr);
arr.forEach((行)=>{
文件\u数据[行[0]]={
id:第[0]行,
名称:第[1]行,
类型:第[2]行,
类别:第[3]行,
描述:第[5]行,
img:第[4]行
}
})
console.log(文件\u数据);
}

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

稍微不同的方法:

html:


通常我在服务器端构建html,并将其作为字符串传递给客户端,然后将其加载到一个div中,其中包含
$(“#id”).html()
getElementById().innerHTML=

您是如何调用collectAllData()的,它返回到哪里?
函数browseT(){var htmlOutput=HtmlService.createTemplateFromFile(“文件”);htmlOutput.fileData=collectAllData();var htmlParams=htmlOutput.evaluate().setWidth(700).setHeight(540);SpreadsheetApp.getUi().showModelessDialog(htmlParams,'File Browser');}
没有名为fileData的htmlOutput属性或方法。无论如何,htmlService是一个服务器端进程。我建议你读一读谢谢你的建议,我会读的。我觉得fileData方法就在这里:
htmlOutput.fileData=collectAllData()我第一次阅读和理解客户端到服务器的通信,它为我打开了一个全新的世界。我一直使用google.script.run.withSuccessHandler().functionName()调用服务器函数并将数据返回客户端。谢谢您的回答!如何在服务器端解析并接收所需对象?@AlexB与在客户端解析相同。唯一的区别是不支持箭头语法
=>
。在
.gs
中,可以用什么替代
=>
?搜索、调解您阅读和练习的内容!这并不重要,但OP需要一个对象文件_data:
{id1:{},id2:{},id3:{}…}
。我想你的将创建一个数组
[]
@TheMaster Yeh。我甚至在回答问题时都犹豫了,因为我不想让人觉得我在争夺几分。但我认为这可能会对OP有所帮助。我想感谢你们的贡献和帮助,但在这一点上,我会坚持@TheMaster@AlexB不错的选择。请务必检查主答案。@Cooper,我已经创建了该对象,并且我能够创建该对象,但仍然无法将其插入到我的HTML中。在HTML中,我所需要的只是所需的file_数据变量和其中的对象,这样我就可以访问代码其余部分中的所有项,以我需要的方式操作数据
function collectAllData(){
  var sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName(DATA);
  var fileData = sheet.getDataRange().getValues();
  return fileData;
}