【发布时间】:2019-09-25 21:04:27
【问题描述】:
我正在构建一个函数,它应该获取 XML 响应的元素并将元素的每次迭代存储在电子表格中它自己的行中,直到所有元素都被考虑在内。这有效,直到有超过 500 个帐户要返回(请参阅here 了解 API 信息)。然后,我收到 数据中的列数与范围内的列数不匹配。数据有 12 个,但范围有 11 个。请在下面查看我的代码,感谢您的时间和帮助。
function testPOST(e) {
var url = "https://api.webex.com/WBXService/XMLService";
var payload = e;
var options =
{
"method" : "POST",
"payload" : payload,
"followRedirects" : true,
"muteHttpExceptions": true
};
var result = UrlFetchApp.fetch(url, options);
if (result.getResponseCode() == 200) {
// var od = XmlService.parse(result),
// pm = XmlService.getPrettyFormat().format(od);
// Logger.log(pm);
Logger.log(result.getResponseCode() + "\n\n");
/* Preferred Approach */
var ss = SpreadsheetApp.openById("ID").getSheetByName("Output");
var header = [],
values = [],
root = XmlService.parse(result).getRootElement(),
c1 = root.getChildren();
for(var i = 0; i < c1.length;i++){
if (c1[i].getName() == "body") {
var c2 = c1[i].getChildren()[0].getChildren();
for (var j = 0; j < c2.length; j++) {
if (c2[j].getName() == "user") {
var c3 = c2[j].getChildren();
var temp = [];
for (var k = 0; k < c3.length; k++) {
if (j == 0) header.push(c3[k].getName());
temp.push(c3[k].getValue());
}
values.push(temp);
}
}
}
}
values.unshift(header);
Logger.log(values);
ss.getRange(1, 1, values.length, values[0].length).setValues(values);
}
else
{
Logger.log("\nFAILED ERROR:\n" + result.getContentText());
}
}
function myFuction() {
var siteName = "SITE",
webexID = "ADMIN",
pwd = "PASSWORD",
startFrom = 0;
var xmlst = '<?xml version="1.0" encoding="UTF-8"?>';
var xmlbdy = '<message xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">'
+'<header><securityContext>'
+'<siteName>'+siteName+'</siteName>'
+'<webExID>'+webexID+'</webExID>'
+'<password>'+pwd+'</password>'
+'</securityContext></header>'
+'<body><bodyContent xsi:type="java:com.webex.service.binding.user.LstsummaryUser">'
+'<listControl><startFrom>1</startFrom><maximumNum>500</maximumNum><listMethod>AND</listMethod></listControl>'
+'<order><orderBy>UID</orderBy><orderAD>ASC</orderAD></order>'
+'<active>ACTIVATED</active>'
+'<dataScope></dataScope>'
+'</bodyContent></body></message>';
xmlst += xmlbdy;
var document = XmlService.parse(xmlst);
var output = XmlService.getPrettyFormat().format(document);
// Logger.log("\n" + output + "\n\n\n");
testPOST(output);
}
【问题讨论】:
-
试试
var errorLine; values.every( function (row,i){errorLine = i; return row.length===12}); Logger.log({line:errorLine,row:values[errorLine]})
标签: xml google-apps-script cisco