我正在构建一个函数,该函数应该接受XML响应的元素,并将元素的每次迭代存储在电子表格的自己的行中,直到考虑到所有元素为止。这将一直有效,直到要退回的帐户超过500个为止(有关API信息,请参见here)。然后,我收到数据中的列数与范围中的列数不匹配。数据有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);
}
也许尝试这样的事情?
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);
var lA=[];
if (result.getResponseCode() == 200) {
Logger.log(result.getResponseCode() + "\n\n");
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);
lA.push(temp.length);
}
}
}
}
values.unshift(header);
Logger.log(values);
var lnth=lA.sort(function(a,b){return b-a;})[0];
ss.getRange(1,1,values.length,lnth).setValues(values);
}
else
{
Logger.log("\nFAILED ERROR:\n" + result.getContentText());
}
}
要解决此问题,请确保最后一列中的数据没有延伸到下一列中。在此示例中,数据为3,范围为3,但是由于最后一列的数据扩展到下一列,因此数据为4,范围为3。
错误说明:https://i.stack.imgur.com/XjI7F.png
要解决此错误,请将最后一列的宽度扩展到最后一列中的所有数据都适合最后一列的内部,并且不会重叠到下一列中。