getSheet method

ISheet getSheet(
  1. String name, {
  2. Map? fieldMap,
})

Implementation

ISheet getSheet(String name, {Map? fieldMap}) {
  var sheet = _sheetMap[name];

  if (sheet == null) {
    throw "sheet $name not exist";
  }

  var fieldDict = {};
  if (fieldMap != null) {
    for (var key in fieldMap.keys) {
      fieldDict[fieldMap[key]] = key;
    }
  }

  List<String> fieldList = [];
  List<Map> dataList = [];
  var fieldIndexMap = {};

  for (var i = 0; i < sheet.rows.length; i++) {
    var row = sheet.rows[i];

    // parse field
    if (i == 0) {
      for (var j = 0; j < row.length; j++) {
        var info = row[j];
        var value = info?.value;

        if (value != null && fieldDict[value] != null) {
          fieldIndexMap[j] = fieldDict[value];
        } else {
          fieldIndexMap[j] = value;
        }

        fieldList.add(value);
      }
      continue;
    }

    // parse data
    var data = {};

    for (var j = 0; j < row.length; j++) {
      var info = row[j];
      var value = info?.value;

      if (fieldIndexMap[j] == null) {
        continue;
      }

      data[fieldIndexMap[j]] = value;
    }

    dataList.add(data);
  }

  return ISheet(fieldList, dataList);
}