Преобразование ассоциативного массива в числовой для записи в листе в скрипте приложений - PullRequest
0 голосов
/ 26 мая 2018

Я пытаюсь записать извлечение каталога, предоставленного в JSON, в электронную таблицу Google.

Я могу получить JSON и записать поля, но я застрял при записи данных сотрудника на лист,JSON предоставляет ассоциативный массив.Насколько я понимаю, чтобы использовать Range.setValues(), вам нужно иметь числовой массив.

I get this. In the Logger the Array says null

Я могу записать названия полей в первый рядGoogle Sheet.

Код, который я использую для записи данных о сотрудниках:

function writeJSONtoSheet(json, sheetId) {

  var sheet = SpreadsheetApp.openById(sheetId).getSheets()[0];

  var header = sheet.getRange(1, 1, 1, json['fields'].length+1); //A1 to O1
  var headerVals = header.getValues();
  var newColsTitles = ["ID #"];
  var newColsIndex = ["id"];

  for (var i = 0; i < json['fields'].length; i++){
    newColsTitles.push(json['fields'][i]['name']);
    newColsIndex.push(json['fields'][i]['id'])
  }

  header.setValues([newColsTitles]);
  var employeeRows = sheet.getRange(2,1,json['employees'].length,json['fields'].length+1);
  var employees = [];
  var empArr = [];
  var emps = [];
  for (var e = 0; e < json['employees'].length; e++) {
    employees.push(json['employees'][e]);
  }
  for (var y = 0; y < employees.length; y++){
    for (var x = 0; x < newColsIndex.length; x++){
      empArr[y] = [];
      empArr[y][x] = employees[y][newColsIndex[x]];
      console.log(employees[y][newColsIndex[x]])
    }
  }
  employeeRows.setValues(empArr);

}

Когда я регистрирую employees[y][newColsIndex[x]] внутри Цикла, он корректно зацикливается на полях каждого сотрудника.

Формат JSON следующий:

{
"fields": [
    {
        "id": "displayName",
        "type": "text",
        "name": "Display Name"
    },
    {
        "id": "firstName",
        "type": "text",
        "name": "First Name"
    },
    {
        "id": "lastName",
        "type": "text",
        "name": "Last Name"
    },
    {
        "id": "gender",
        "type": "text",
        "name": "Gender"
    },
    {
        "id": "jobTitle",
        "type": "list",
        "name": "Job Title"
    },
    {
        "id": "workPhone",
        "type": "text",
        "name": "Work Phone"
    },
    {
        "id": "workPhoneExtension",
        "type": "text",
        "name": "Work Extension"
    },
    {
        "id": "skypeUsername",
        "type": "text",
        "name": "Skype Username"
    },
    {
        "id": "facebook",
        "type": "text",
        "name": "Facebook URL"
    }
],
"employees": [
    {
        "id":123,
        "displayName":"John Doe",
        "firstName":"John",
        "lastName":"Doe",
        "gender":"Male",
        "jobTitle":"Customer Service Representative",
        "workPhone":"555-555-5555",
        "workPhoneExtension":null,
        "skypeUsername":"JohnDoe",
        "facebook":"JohnDoeFacebook"
    }
]

} ​​

1 Ответ

0 голосов
/ 27 мая 2018

Изменить

for (var y = 0; y < employees.length; y++){
    for (var x = 0; x < newColsIndex.length; x++){
      empArr[y] = [];
      empArr[y][x] = employees[y][newColsIndex[x]];
      console.log(employees[y][newColsIndex[x]])
    }

на (см. Встроенные комментарии)

for (var y = 0; y < employees.length; y++){
    empArr.push([]);// inserts a new row for each employee
    for (var x = 0; x < newColsIndex.length; x++){
      //empArr[y] = []; // this was reseting the array on each pass
      empArr[y][x] = employees[y][newColsIndex[x]];
      console.log(employees[y][newColsIndex[x]])
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...