Столбцы в данных не соответствуют количеству столбцов в диапазоне (у данных 12, но у диапазона 11) - PullRequest
0 голосов
/ 26 сентября 2019

Я создаю функцию, которая должна принимать элементы ответа XML и сохранять каждую итерацию элемента в отдельной строке таблицы до тех пор, пока все элементы не будут учтены.Это работает до тех пор, пока не будет возвращено более 500 учетных записей (см. здесь для получения информации об 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);
}

Ответы [ 2 ]

1 голос
/ 26 сентября 2019

Попробуйте что-нибудь подобное?

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

}
0 голосов
/ 27 сентября 2019

Чтобы решить эту проблему, убедитесь, что данные в последнем столбце не распространяются прямо в следующий столбец.В этом примере данные равны 3, а диапазон равен 3, однако, поскольку данные в последнем столбце простираются до следующего столбца Google, данные равны 4, а диапазон равен 3.

Иллюстрация ошибки: https://i.stack.imgur.com/XjI7F.png Illustration of error Чтобы исправить эту ошибку, увеличьте ширину последнего столбца, чтобы все данные в последнем столбце помещались внутри последнего столбца и не пересекались со следующим столбцом.

Иллюстрация решения: https://i.stack.imgur.com/1uWr4.png Illustration of solution

...