private Cell getXlsCell(ColumnDisplayDefinition colDef, int colIdx, int curRow, Object cellObj) {
    Row row = sheet.getRow(curRow);
    if (row == null) {
      row = sheet.createRow(curRow);
    }
    Cell retVal = row.createCell(colIdx);

    if (null == cellObj || null == colDef) {
      retVal.setCellValue(getDataXLSAsString(cellObj));
      return retVal;
    }

    int colType = colDef.getSqlType();

    switch (colType) {
      case Types.BIT:
      case Types.BOOLEAN:
        if (null == cellObj) {
          // retVal.setCellValue((Boolean)null);
        } else {
          retVal.setCellValue((Boolean) cellObj);
        }
        break;
      case Types.INTEGER:
        if (null == cellObj) {
          // retVal.setCellValue((Integer)null);
        } else {
          retVal.setCellValue(((Number) cellObj).intValue());
        }
        break;
      case Types.SMALLINT:
      case Types.TINYINT:
        if (null == cellObj) {
          // retVal.setCellValue(((Short) null));
        } else {
          retVal.setCellValue(((Number) cellObj).shortValue());
        }
        break;
      case Types.NUMERIC:
      case Types.DECIMAL:
      case Types.FLOAT:
      case Types.DOUBLE:
      case Types.REAL:
        if (null == cellObj) {
          // retVal.setCellValue((Double) null);
        } else {
          retVal.setCellValue(((Number) cellObj).doubleValue());
        }
        break;
      case Types.BIGINT:
        if (null == cellObj) {
          // retVal.setCellValue((Long)null);
        } else {
          retVal.setCellValue(Long.parseLong(cellObj.toString()));
        }
        break;
      case Types.DATE:
        makeTemporalCell(retVal, (Date) cellObj, "m/d/yy");
        break;
      case Types.TIMESTAMP:
        makeTemporalCell(retVal, (Date) cellObj, "m/d/yy h:mm");
        break;
      case Types.TIME:
        makeTemporalCell(retVal, (Date) cellObj, "h:mm");
        break;
      case Types.CHAR:
      case Types.VARCHAR:
      case Types.LONGVARCHAR:
        cellObj = CellComponentFactory.renderObject(cellObj, colDef);
        retVal.setCellValue(getDataXLSAsString(cellObj));
        break;
      default:
        cellObj = CellComponentFactory.renderObject(cellObj, colDef);
        retVal.setCellValue(getDataXLSAsString(cellObj));
    }

    return retVal;
  }
  public void exportToStream(List<ModelMap> list) {
    // System.out.println(list.size());
    if (list == null || list.size() == 0) {
      // System.out.println("list is blank");
      return;
    }
    System.out.println(list.size());
    Set<String> set = list.get(0).keySet();

    for (Map<String, Object> map : list) {
      createRow(_rowcnt++);
      _backColor = -1;
      Object _obj = map.get("t13y");
      int _spanr = 1;

      for (int i = 0; i < keys.length - 1; i++) {

        Object obj = map.get(keys[i]);
        // if (obj instanceof List) {
        // continue;
        // }

        if (obj == null) continue;
        String _str = obj.toString();
        // try {
        // _str = obj.toString();
        // } catch (Exception e) {
        // System.out.println(i + keys[i]);
        // }
        // System.out.println(_str);
        if (keys[i].equals("dupFlag")) {
          if (obj != null) {
            setCell(i, Long.parseLong(_str));
          } else {
            setCell(i, "");
          }
        } else if (keys[i].equals("key")
            || keys[i].equals("resStatus")
            || keys[i].equals("tvalue")
            || keys[i].equals("arrayFlag")
            || keys[i].equals("filepath")) {
          if (obj != null) {
            setCell(i, _str);
          } else {
            setCell(i, "");
          }
        } else if (keys[i].equals("svalue")) {
          if (obj != null) {
            setCell(i, _str, Double.parseDouble((String) map.get("similarity")));
          } else {
            setCell(i, "");
          }
        } else if (keys[i].equals("similarity")) {
          if (obj != null) {
            setCell(i, Double.parseDouble(_str));
          } else {
            setCell(i, "");
          }
        }
        // else if (keys[i].equals("t13y")) {
        // if (obj != null) {
        // setPlainCell(i, obj, map.get("t13y1"));
        // } else {
        // setPlainCell(i, "", null);
        // }
        // } else if (keys[i].equals("t13ys")) {
        // if (obj != null) {
        // setPlainCell(i, obj, null);
        // } else {
        // setPlainCell(i, "", null);
        // }
        // }

      }
      if (_obj == null) continue;
      List<t13yRule> _rules = null;
      _rules = (List<t13yRule>) _obj;
      _spanr = _rules.size();
      int _tidx = lbls.length - 3;
      for (int j = 0; j < _spanr; j++) {
        t13yRule _rule = _rules.get(j);
        if (j > 0) {
          createRow(_rowcnt++);
        }
        setPlainCell(_tidx, _rule.getRuleSeverity(), 0, _rule.getRuleSeverity().length());
        setPlainCell(_tidx + 1, _rule.getRuleDescription(), -1, -1);
        setPlainCell(_tidx + 2, _rule.getRuleSuggestion(), -1, -1);
      }
    }
    // set column width, if the keys' order changed, you should update this

    int[] wdt = {300, 50, 50, 250, 70, 70, 250, 250, 60, 250, 300};
    setWidth(wdt);

    // export to stream

    // exportXLSToStream(os);
  }