繁体   English   中英

从 JSON 收集数据比在电子表格中循环更快的方法

[英]Faster way to collect data from JSON than looping in spreadsheet

我正在学习 Javascript,这是我第一次使用 Google Sheets Apps Script。 我正在做的是获取一个大型 JSON 文件并将其导入我的工作表中。 之后,我根据 JSON 中的键:值填充数百个属性。

这就是它现在的工作方式:

  1. Go 到我工作表的第一列和第一行。
  2. 获取名称(属性名称)。
  3. 在 JSON 中搜索键,然后获取值。
  4. 使用 JSON 中的值更新相邻单元格。

现在一切正常,唯一的问题是它似乎很慢。 每次查找大约需要 5-1 秒,当我有 200 多个属性时,它看起来很慢。 这可能只是一个限制,也可能是我的逻辑。

我的工作表可以在这里找到: https://docs.google.com/spreadsheets/d/1tt3eh1RjL_CbUIaPzj10DbocgyDC0iNRIba2B4YTGgg/edit#gid=0

我的 function 什么都做:

function parse() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  var range = sheet.getRange(2,1);

  var range1 = sheet.getRange("A2");
  var cell = range.getCell(1, 1);

  var event_line = cell.getValue();
  
  var tmp = event_line.split(". ");

  var col_number = tmp[0];
  var event_name = tmp[1];

  event_json = get_json_from_cell(col_number);

  const obj = JSON.parse(event_json);
  var traits = obj.context.traits;
  var properties = obj.properties;



  //Get the range for the section where properties are

  var traits_range = sheet.getRange("contextTraits");
  var allprop = sheet.getRange("testAll");

  var alllen = allprop.getNumRows();

  var length = traits_range.getNumRows();
  
  for (var i = 1; i < length; i++) {
    var cell = traits_range.getCell(i, 1);
    var req = traits_range.getCell(i, 4).getValue();
    var trait = cell.getValue();
    var result = traits[trait];
    var result_cell = traits_range.getCell(i, 3);

    if (result == undefined) {
      if (req == "y"){
        result = "MISSING REQ";
        result_cell.setBackground("red");
      } else {
        result = "MISSING";
        result_cell.setBackground("green");
      }
    } else {
      result_cell.setBackground("blue");
    }
    result_cell.setValue(result);
    Logger.log(result);    
  }

  for (var i = 1; i < alllen; i++) {
    var cell = allprop.getCell(i,1);
    var req = allprop.getCell(i, 4).getValue();
    var prop = cell.getValue();
    var result = properties[prop];
    var result_cell = allprop.getCell(i, 3);

    if (result == undefined) {
      if (req == "y"){
        result = "MISSING REQ";
        result_cell.setBackground("red");
      } else {
        result = "MISSING";
        result_cell.setBackground("green");
      }
    } else {
      result_cell.setBackground("blue");
    }
    result_cell.setValue(result);
  }
  Logger.log(result);


}

本文暂无回复,试试以下方法:

从 JSON 收集数据比在电子表格中循环更快的方法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2023 STACKOOM.COM