элементы списка в порядке столбцов / строк в листах Google - PullRequest
1 голос
/ 10 февраля 2020

Я делаю тесты на Google-листах, и у меня есть этот скрипт: он обращается к данным и вставляет их в лист, но не делает это в нужном порядке.

что у меня есть: плохой лист

что я хочу: хороший лист

function callapi() {


  var response = UrlFetchApp.fetch("https://jsonplaceholder.typicode.com/todos");
  var json = response.getContentText();
  var data = JSON.parse(json);
      for ( var i = 0; i < data.length; i++) {
       var title = data[i].title
        var id = data[i].id
         var userId = data[i].userId
       Logger.log(title)
     var sheet = SpreadsheetApp.getActiveSheet();
  sheet.getRange(sheet.getLastRow() + 1,1).setValue([title]);
    sheet.getRange(sheet.getLastRow() + 1,2).setValue([id]);
     sheet.getRange(sheet.getLastRow() + 1,3).setValue([userId]);
 }
      
  }

Я ценю любую помощь.

1 Ответ

1 голос
/ 10 февраля 2020

Почему?

Поскольку lastRow меняется после каждого setValue(). Если lastrow равен 1, после установки title становится 2> id устанавливается на 2 + 1> userId устанавливается на 3 + 1

Решение:

Использование переменная для хранения данных:

var sheet = SpreadsheetApp.getActiveSheet();
var lr = sheet.getLastRow();
  sheet.getRange(lr + 1,1).setValue([title]);
  sheet.getRange(lr + 1,2).setValue([id]);
  sheet.getRange(lr + 1,3).setValue([userId]);
 }

Упрощение путем пакетирования:

var sheet = SpreadsheetApp.getActiveSheet();
var lr = sheet.getLastRow();
sheet.getRange(lr+1,1, 1, 3).setValues([[title, id, userId]]);

Упрощение путем пакетирования далее,

//v8
const data = JSON.parse(json);
const sheet = SpreadsheetApp.getActiveSheet();
const lr = sheet.getLastRow();
const output = data.map(obj=>Object.values(obj));
sheet.getRange(lr + 1, 1, output.length, output[0].length).setValues(output);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...