Google apps script 从Google应用程序脚本和javascript/jQuery中的另一个对象或数组构建对象
我正在使用Google Apps脚本的电子表格加载项中的函数接收以下对象: 功能: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
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;
}