Проблеми със скриптовия масив на приложенията на Google

Работя върху скрипт за приложения, който зарежда xml данни във функция и анализира данните въз основа на въвеждане от потребителя.

XML е прост и ясен:

<?xml version="1.0" encoding="UTF-8"?>
<Records>
    <Record>
        <username>jjohnson</username>
        <firstName>John</firstName>
        <lastName>johnson</lastName>
        <email>[email protected]</email>
    </Record>
    <Record>
        <username>bsimmons</username>
        <firstName>ben</firstName>
        <lastName>simmons</lastName>
        <email>[email protected]</email>
    </Record>
    ...etc
</Records>

Функцията взема XML и зарежда данните в масив от обекти и се опитва да анализира данните въз основа на потребителското име и да покаже съдържанието като ред в google sheets.

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

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

Благодаря за вашата помощ!


person Imagesthataspire    schedule 31.05.2018    source източник
comment
опитайте да добавите Logger.log(arr) някъде и вижте какво е регистрирано.   -  person Liora Haydont    schedule 31.05.2018
comment
Дори по-добре от Logger за сложни данни е да използвате console и след това да прегледате (и да взаимодействате!) с регистрирания обект в Stackdriver.   -  person tehhowch    schedule 31.05.2018
comment
Как да използвам конзолата, докато съм в Google таблици? Не виждам начин да отворя инструменти за разработчици или да проверя.   -  person Imagesthataspire    schedule 31.05.2018
comment
@Imagesthataspire това е в раздела за изглед   -  person Liora Haydont    schedule 31.05.2018
comment
Мисля, че вашият скрипт работи без грешки. Но не съм сигурен за Проблемът е, че когато функцията се изпълнява, нищо не се връща. Мога да получа листове за показване на съдържанието на масива без обекти, но не и филтрирания изход. Мога ли да ви попитам за изходните резултати, които искате?   -  person Tanaike    schedule 01.06.2018
comment
Моето намерение е скриптът да показва само обекта, свързан с конкретно потребителско име. Така че, когато се използва функцията XMLCONTACT(jjohnson), скриптът ще върне масив само с тези данни за контакт. В момента не връща нищо.   -  person Imagesthataspire    schedule 04.06.2018
comment
Съжалявам. Мога да забележа отговора ви точно сега. Ако отговаряте на вашите коментари на потребителите, моля, поставете @username. По този начин потребителят може да получи известие за вашия отговор. Когато XMLCONTACT("jjohnson") се изпълнява, функцията връща [{"username":"jjohnson","firstName":"John","lastName":"johnson","email":"[email protected]"}]. За тази ситуация мога ли да ви попитам за вашия проблем?   -  person Tanaike    schedule 06.06.2018
comment
@Tanaike, благодаря ви за отговора (и за основата на Stack. Все още съм нов в това). Да, това е правилно. Проблемът ми е, че не мога да накарам това да се покаже в листове. Как да инструктирам листовете да зареждат масив от обекти в ред?   -  person Imagesthataspire    schedule 06.06.2018
comment
Благодаря ви за отговора. Публикувах отговора си. Можете ли да го потвърдите?   -  person Tanaike    schedule 07.06.2018


Отговори (1)


Искате да поставите върнатите стойности от XMLCONTACT() в електронна таблица. Ако разбирам какво искате, какво ще кажете за тази модификация? От вашия скрипт реших, че може да искате да използвате XMLCONTACT() като персонализирана функция за електронна таблица. Затова, моля, променете както следва.

Връща стойностите като двумерен масив.

от:

var newarr = []
for(var j= 0; j < arr.length; j++){
  if(arr[j].username === username ){
    newarr.push(arr[j]);
  }
}
return newarr;

To :

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]);. Ако не можете да разберете това, моля, кажете ми.

Ако не съм разбрал какво искате да направите, моля, кажете ми. Бих искал да променя отговора си.

person Tanaike    schedule 06.06.2018
comment
Благодаря ви, точно това търсех! - person Imagesthataspire; 07.06.2018
comment
@Imagesthataspire Радвам се, че проблемът ти е разрешен. Благодаря ви за цялата ви помощ. - person Tanaike; 08.06.2018