@SuppressWarnings("unchecked")
  private void writeToCell(Cell cell, Col col, Object fieldValueObj) {
    if (fieldValueObj == null) {
      cell.setCellValue((String) null);
      return;
    }
    if (col.getConverter() != null) {
      try {
        ColumnValueConverter<?, Object> converter = (ColumnValueConverter<?, Object>) col.getConverter().newInstance();
        fieldValueObj = converter.serialize(fieldValueObj);
      } catch (InstantiationException e) {
        throw new RuntimeException(e);
      } catch (IllegalAccessException e) {
        throw new RuntimeException(e);
      }
    }
    if (col.getDataFormat() != null) {
      cell.setCellStyle(CellStylesBank.get(sheet.getNativeSheet().getWorkbook()).getCustomDataFormatStyle(
          col.getDataFormat()));
    }

    if (col.getType() == Date.class) {
      if (col.getDataFormat() == null) {
        cell.setCellStyle(CellStylesBank.get(sheet.getNativeSheet().getWorkbook()).getDateStyle());
      }
    }

    writeToCell(cell, fieldValueObj, col.getType());
  }