Считать массив JSON из ячейки и записать часть последнего объекта в другую ячейку в той же строке - PullRequest
1 голос
/ 07 февраля 2020

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

Данные, которые мне нужны, находятся в столбце L мой лист (начиная со строки 2) и в формате:

[{"id": "XX:123456", "timestamp": "2020-01-27T19:25:51.303"}, {"id": "XX:654321", "timestamp": "2020-01-27T19:40:37.06"}]

В настоящее время мой сценарий выглядит следующим образом:

var ui = SpreadsheetApp.getUi();
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("parsed");
var dataRange = sheet.getDataRange();
var lastRow = dataRange.getLastRow();



function parseData() {
   for (var row=2; row<lastRow; row++) 
   {
      var parseRange = sheet.getRange(row,12,5,1)
      var json = JSON.parse(parseRange.getValue());
      var lastObject = json.length-1;
      var org = json[lastObject];
      var orgID = org.id;
      var timestamp = org.timestamp;

      sheet.getRange(row, 13).setValue(orgID);
      sheet.getRange(row, 14).setValue(timestamp);
   }
}

Это очень много времени, чтобы процесс, как он читает и пишет каждую строку по очереди. Я предположил, что массив JSON уже находится в последовательном порядке, но, проверив, кажется, он случайный. В идеале я хотел бы сначала отсортировать массив по отметке времени, затем взять объект с последней отметкой времени и записать эти данные в столбцы M и N и сделать это более эффективным способом.

1 Ответ

2 голосов
/ 07 февраля 2020

Фрагмент:

let parseRange = sheet.getRange(1+1,12,lastRow-1,1);//col L
let values = parseRange.getValues();
let out = values.map(([row])=>{
  let {id, timestamp} = JSON.parse(row).pop();
  return [id, timestamp];
});
sheet.getRange(1+1, 13, lastRow-1, 2).setValues(out);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...