0

我正在开发一个将 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 并将数据加载到对象数组中,并尝试根据用户名解析数据并将内容显示为谷歌表格中的一行。

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;
}

问题是当函数运行时,什么都没有返回。我可以让工作表显示没有对象的数组内容,但不能显示过滤后的输出。

谢谢你的帮助!

4

1 回答 1

1

您想将返回的值从XMLCONTACT()电子表格中。如果我明白你想要什么,这个修改怎么样?从您的脚本中,我认为您可能希望将XMLCONTACT()其用作电子表格的自定义函数。所以请修改如下。

它将值作为二维数组返回。

从 :

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]);. 如果您不能理解这一点,请告诉我。

如果我误解了你想做什么,请告诉我。我想修改我的答案。

于 2018-06-06T23:04:39.167 回答