poi导入导出数据库中的数据的工具类之一(SimpleExcelUtil)

public class SimpleExcelUtil {


/**
* 数据库内容以excel格式导出
* @param wwb
* @param wSheet
* @param parameters 参数工具类
*/
public void simpleExport(Workbook wwb,Sheet wSheet,SimpleExportParameter parameters){
fillHeaders(wwb,wSheet,parameters);
fillContent(wwb,wSheet,parameters);
}


/**
* 生成excel表格中的内容
* @param wwb
* @param wSheet
* @param parameters
*/
private void fillContent(Workbook wwb, Sheet wSheet, SimpleExportParameter parameters) {
List<Map<String, Object>> list = parameters.getDataList();
String[] field = parameters.getFieldsId();
for(int i =0 ; i<list.size();i++){
Row row = wSheet.createRow(i+2);
for(int j = 0; j<list.size();j++){
Cell cell = row.createCell(j);
Object origin = list.get(i).get(field[j]);//原始数据
InsertDataFormat(cell, origin);
}
}
}



/**
* 生成excel表格中的表头
* @param wwb
* @param wSheet
* @param parameters
*/
private void fillHeaders(Workbook wwb, Sheet wSheet, SimpleExportParameter parameters) {
wSheet.addMergedRegion(new CellRangeAddress(0, 0, 0,parameters.getFieldsName().length-1));
Row titleRow = wSheet.createRow(0);//标题行
Cell titileCell = titleRow.createCell(0);//合并成一个单元格
Font titleFont = wwb.createFont();//标题字体
titleFont.setFontHeightInPoints((short)30);
titleFont.setFontName("Courier New");
titleFont.setBoldweight(Font.BOLDWEIGHT_BOLD);
CellStyle titleStyle = wwb.createCellStyle();//标题单元格格式:居中,底对齐
titleStyle.setAlignment(CellStyle.ALIGN_CENTER);
titleStyle.setVerticalAlignment(CellStyle.VERTICAL_BOTTOM);
titleStyle.setFont(titleFont);
titileCell.setCellStyle(titleStyle);
titileCell.setCellValue(parameters.getTitle());
// wSheet.setDefaultColumnWidth(20 * DEFAULT_COLUMN_WIDTH);
for(int i = 0;i<parameters.getFieldsName().length;++i){
if(parameters.getWidth()!=null){
// wSheet.setColumnWidth(i,Integer.parseInt(parameters.getWidth()[i])* DEFAULT_COLUMN_WIDTH);
}
}
Font font = wwb.createFont();//列标题行字体
font.setFontHeightInPoints((short)15);
font.setFontName("Courier New");
font.setBoldweight(Font.BOLDWEIGHT_BOLD);
CellStyle cellStyle = wwb.createCellStyle();//列标题行单元格格式:居中,底对齐
cellStyle.setAlignment(CellStyle.ALIGN_CENTER);
cellStyle.setVerticalAlignment(CellStyle.VERTICAL_BOTTOM);
cellStyle.setFont(font);
Row columnrRow = wSheet.createRow(1);//列标题行
for(int i = 0;i<parameters.getFieldsName().length;++i){
Cell cell = columnrRow.createCell(i);
cell.setCellStyle(cellStyle);
cell.setCellValue(parameters.getFieldsName()[i]);
}

}

/**
* 上传excel表格的数据转换成List<Map<String, Object>>
* @param wSheet
* @param startIndex 开始取数的行数
* @param fields 表列名称字符数组 存入List<Map<String, Object>>中map的key值
* @return
*/
public List<Map<String, Object>> readSimple(Sheet wSheet,int startIndex,String[] fields){
List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
for(Row row : wSheet){
//从数据库开始读
if(row.getRowNum()>=startIndex){
Map<String, Object> rowMap = new HashMap<String, Object>();
for (Cell cell : row) {
//fields代表的列以后的数据忽略
if(cell.getColumnIndex()<fields.length){
rowMap.put(fields[cell.getColumnIndex()], getRightTypeCellValue(cell));
}
}
list.add(rowMap);
}
}
return list;
}



/** 
     * 
     * @param cell 
     *            一个单元格的对象 
     * @return 获取该单元格相应的类型的值 
     */  
    public static Object getRightTypeCellValue(Cell cell) {  
        Object object = null;  
        switch (cell.getCellType()) {  
        case Cell.CELL_TYPE_STRING: {  
            object = cell.getStringCellValue();  
            break;  
        }  
        case Cell.CELL_TYPE_NUMERIC: {  
            if (HSSFDateUtil.isCellDateFormatted(cell)) {// 处理日期格式、时间格式  
                SimpleDateFormat sdf = null;  
                if (cell.getCellStyle().getDataFormat() == HSSFDataFormat  
                        .getBuiltinFormat("h:mm")) {  
                    sdf = new SimpleDateFormat("HH:mm");  
                } else {// 日期  
                    sdf = new SimpleDateFormat("yyyy-MM-dd");  
                }  
                Date date = cell.getDateCellValue();  
                object = sdf.format(date);  
            } else {  
                object = cell.getNumericCellValue();  
            }  
            break;  
        }  
        case Cell.CELL_TYPE_FORMULA: {  
            cell.setCellType(Cell.CELL_TYPE_NUMERIC);  
            object = cell.getNumericCellValue();  
            break;  
        }  
        case Cell.CELL_TYPE_BLANK: {  
            object = cell.getStringCellValue();  
            break;  
        }  
        }  
        return object;  
    }  


/**
* 内部方法进行数据格式判断,数据类型格式化,并存入对应的单元格中
* @param cell 当前的单元格
* @param value Object类型的值ֵ
*/
private static void InsertDataFormat(Cell cell,Object value){
/**
*对值进行判断 不同类型的值进行赋值ֵ
*/
if (value instanceof Integer) {
    int result = ((Integer) value).intValue();
    cell.setCellValue(result);
} else if (value instanceof String) {
    String result = (String) value;
    cell.setCellValue(result);
   } else if (value instanceof Double) {
    double result = ((Double) value).doubleValue();
    cell.setCellValue(result);
   } else if (value instanceof Float) {
    float result = ((Float) value).floatValue();
    cell.setCellValue(result);
   } else if (value instanceof Long) {
    long result = ((Long) value).longValue();
    cell.setCellValue(result);
   } else if (value instanceof Boolean) {
    boolean result = ((Boolean) value).booleanValue();
    cell.setCellValue(result);
   } else if (value instanceof Date) {
    Date result = (Date) value;
    cell.setCellValue(result);
   }  
}

}

//注意需要结合参数实体工具类SimpleExportParameter一起使用

//猛戳这里拿(https://blog.csdn.net/futao127/article/details/80501015)SimpleExportParameter工具类


猜你喜欢

转载自blog.csdn.net/futao127/article/details/80500939