Проблемы с массивом скриптов приложений Google - PullRequest
0 голосов
/ 31 мая 2018

Я работаю над сценарием приложения, который загружает данные 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;
}

Проблема в том, что при запуске функции ничего не возвращается.Я могу получить листы для отображения содержимого массива без объектов, но не отфильтрованный вывод.

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 07 июня 2018

Вы хотите поместить возвращенные значения из 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;

Примечание:

  • Предполагается, что этот сценарий является сценарием привязки к контейнеру электронной таблицы.
  • Когда вы используете это, например, укажите =XMLCONTACT2("jjohnson") для ячейки электронной таблицы.
  • Если вы хотите изменить порядок значений, измените newarr.push([arr[j].username, arr[j].firstName, arr[j].lastName, arr[j].email]);.Если вы не можете этого понять, скажите, пожалуйста.

Если я неправильно понимаю, что вы хотите сделать, скажите, пожалуйста.Я хотел бы изменить свой ответ.

...