首页 > 解决方案 > 从单元格中读取 JSON 数组并将最后一个对象的一部分写入同一行中的另一个单元格

问题描述

我正在尝试从 Google 表格中的 JSON 数组中提取一些信息,并获取该信息的一部分并将其复制到旁边的两列中。

我想要的数据位于工作表的 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,并以更有效的方式执行此操作。

标签: google-apps-scriptgoogle-sheets

解决方案


片段:

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

推荐阅读