Google 应用程序脚本数组问题
Google apps script array issues
我正在开发一个应用程序脚本,该脚本将 xml 数据加载到函数中并根据用户输入解析数据。
xml简单明了:
<?xml version="1.0" encoding="UTF-8"?>
<Records>
<Record>
<username>jjohnson</username>
<firstName>John</firstName>
<lastName>johnson</lastName>
<email>john@someurl.com</email>
</Record>
<Record>
<username>bsimmons</username>
<firstName>ben</firstName>
<lastName>simmons</lastName>
<email>ben@someurl.com</email>
</Record>
...etc
</Records>
该函数采用 XML 并将数据加载到对象数组中,并尝试根据用户名解析数据并将内容显示为 google 工作表中的一行。
function XMLCONTACT(username) {
var url = '<XML source>';
var ContactXml = UrlFetchApp.fetch(url).getContentText();
var document = XmlService.parse(ContactXml);
var root = document.getRootElement();
var arr = [];
var XMLChildren = root.getChildren("Record");
for (var i = 0; i < XMLChildren.length; i++) {
arr.push({
username: XMLChildren[i].getChild("username").getText(),
firstName: XMLChildren[i].getChild("firstName").getText(),
lastName: XMLChildren[i].getChild("lastName").getText(),
email: XMLChildren[i].getChild("email").getText()
});
}
var newarr = []
for(var j= 0; j < arr.length; j++){
if(arr[j].username === username ){
newarr.push(arr[j]);
}
}
return newarr;
}
问题是当函数运行时,没有任何返回。我可以获得工作表来显示没有对象的数组内容,但不能显示过滤后的输出。
感谢您的帮助!
您想将 XMLCONTACT()
的返回值放入电子表格。如果我明白你想要什么,这个修改怎么样?根据您的脚本,我认为您可能希望将 XMLCONTACT()
用作电子表格的自定义函数。所以请修改如下。
它将returns值作为二维数组。
发件人:
var newarr = []
for(var j= 0; j < arr.length; j++){
if(arr[j].username === username ){
newarr.push(arr[j]);
}
}
return newarr;
收件人:
var newarr = [];
for(var j= 0; j < arr.length; j++){
if(arr[j].username === username ){
newarr.push([arr[j].username, arr[j].firstName, arr[j].lastName, arr[j].email]);
}
}
return newarr;
注:
- 假定该脚本为Spreadsheet的容器绑定脚本
- 例如,当您使用此功能时,请将
=XMLCONTACT2("jjohnson")
放入电子表格的单元格中。
- 如果要更改值的排列方式,请修改
newarr.push([arr[j].username, arr[j].firstName, arr[j].lastName, arr[j].email]);
。如果你不明白这个,请告诉我。
如果我误解了你想做什么,请告诉我。我想修改我的答案。
我正在开发一个应用程序脚本,该脚本将 xml 数据加载到函数中并根据用户输入解析数据。
xml简单明了:
<?xml version="1.0" encoding="UTF-8"?>
<Records>
<Record>
<username>jjohnson</username>
<firstName>John</firstName>
<lastName>johnson</lastName>
<email>john@someurl.com</email>
</Record>
<Record>
<username>bsimmons</username>
<firstName>ben</firstName>
<lastName>simmons</lastName>
<email>ben@someurl.com</email>
</Record>
...etc
</Records>
该函数采用 XML 并将数据加载到对象数组中,并尝试根据用户名解析数据并将内容显示为 google 工作表中的一行。
function XMLCONTACT(username) {
var url = '<XML source>';
var ContactXml = UrlFetchApp.fetch(url).getContentText();
var document = XmlService.parse(ContactXml);
var root = document.getRootElement();
var arr = [];
var XMLChildren = root.getChildren("Record");
for (var i = 0; i < XMLChildren.length; i++) {
arr.push({
username: XMLChildren[i].getChild("username").getText(),
firstName: XMLChildren[i].getChild("firstName").getText(),
lastName: XMLChildren[i].getChild("lastName").getText(),
email: XMLChildren[i].getChild("email").getText()
});
}
var newarr = []
for(var j= 0; j < arr.length; j++){
if(arr[j].username === username ){
newarr.push(arr[j]);
}
}
return newarr;
}
问题是当函数运行时,没有任何返回。我可以获得工作表来显示没有对象的数组内容,但不能显示过滤后的输出。
感谢您的帮助!
您想将 XMLCONTACT()
的返回值放入电子表格。如果我明白你想要什么,这个修改怎么样?根据您的脚本,我认为您可能希望将 XMLCONTACT()
用作电子表格的自定义函数。所以请修改如下。
它将returns值作为二维数组。
发件人:
var newarr = []
for(var j= 0; j < arr.length; j++){
if(arr[j].username === username ){
newarr.push(arr[j]);
}
}
return newarr;
收件人:
var newarr = [];
for(var j= 0; j < arr.length; j++){
if(arr[j].username === username ){
newarr.push([arr[j].username, arr[j].firstName, arr[j].lastName, arr[j].email]);
}
}
return newarr;
注:
- 假定该脚本为Spreadsheet的容器绑定脚本
- 例如,当您使用此功能时,请将
=XMLCONTACT2("jjohnson")
放入电子表格的单元格中。 - 如果要更改值的排列方式,请修改
newarr.push([arr[j].username, arr[j].firstName, arr[j].lastName, arr[j].email]);
。如果你不明白这个,请告诉我。
如果我误解了你想做什么,请告诉我。我想修改我的答案。