【问题标题】:Columns in the data does not match the number of columns in the range (The data has 12 but the range has 11)数据中的列与范围中的列数不匹配(数据有 12 但范围有 11)
【发布时间】: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


【解决方案1】:

试试这样吧?

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

}

【讨论】:

    【解决方案2】:

    要解决此问题,请确保最后一列中的数据不会延伸到下一列。在此示例中,数据为 3,范围为 3,但是由于最后一列中的数据延伸到下一列谷歌表格,因此数据为 4,范围为 3。

    错误说明:https://i.stack.imgur.com/XjI7F.png 要修复此错误,请将最后一列的宽度扩展到最后一列中的所有数据都适合最后一列且不与下一列重叠的位置。

    解决方案说明:https://i.stack.imgur.com/1uWr4.png

    【讨论】:

    • 列宽与此错误无关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 2015-08-26
    • 2016-01-13
    相关资源
    最近更新 更多