第一版代码:
基础功能跳转此文章java自定义Excel导出工具:
简介
新增功能:
- 添加自定义字段导出功能, 用户可以选择字段进行导出
- 将字典类型数据进行转换(如:0=女,1=男, 将0转换为女, 1转换为男)
- 添加表头格式
- 随机文件名称, 防止多次导出时文件覆盖问题
实现代码
Excel注解
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface Excel { /** * 导出到Excel中的名字 */ String name() default ""; /** * 日期格式, 如: yyyy-MM-dd */ String dateFormat() default ""; /** * 字典的key值 */ String dictKey() default ""; /** * 读取内容转表达式 (如: 0=男,1=女,2=未知) */ String dictExp() default ""; }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
Excel的导出工具类
/** * Excel的工具类 */ public class ExcelUtil<T> { /** * 工作薄 */ private Workbook wb; /** * 工作表 */ private Sheet sheet; /** * 需要导出的数据 */ private List<T> exportList; /** * 对象的class对象 */ private Class<T> clazz; /** * 被选中需要导出的字段名称 */ private Map<String, Object> checkedFieldsName; /** * 被选中需要导出的字段对象 */ private List<Field> checkedFields; /** * 包含需要字典转换的字段对象 */ private List<Field> fieldsContainDict; /** * 对象中的字典值 */ private Map<String, Map<String, String>> dicts; private ExcelUtil(){ } public ExcelUtil(Class<T> clazz){ this.clazz = clazz; } /** * * @param list * @param sheetName * @param fieldsName */ public void exportExcel(List<T> list, Map<String, Object> fieldsName, String sheetName){ // 初始化数据 init(list, sheetName, fieldsName); // 转换字典值 try { convertDict(); } catch (IllegalAccessException e) { e.printStackTrace(); } // sheet第一行加入名称数据 createTopRow(); // sheet其他行,添加目标数据 try { createOtherRow(); } catch (IllegalAccessException e) { e.printStackTrace(); } // 导出wb try(OutputStream outFile = new FileOutputStream(generateFileName())){ wb.write(outFile); } catch (IOException e) { e.printStackTrace(); } finally { try { wb.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 添加导出数据 */ private void createOtherRow() throws IllegalAccessException { for (int rowNum = 1; rowNum <= exportList.size(); rowNum++) { Row row = sheet.createRow(rowNum); T t = exportList.get(rowNum - 1); for (int colNum = 0; colNum < checkedFields.size(); colNum++) { Cell cell = row.