没废话上代码,
使用easypoi导出时一般会用到一个实体类
提供一个示例代码:
实体类:
@Data
public class TestVO {
private String id;
@Excel(name = "字段1")
private String findId1;
@Excel(name = "字段2")
private String findId2;
}
工具类:
/**
* 反射修改easypoi表头详细信息
* @param entity 实体对象
* @param fieIdName 修改的实体字段名称
* @param nameTitle 想要修改为xx
* @throws NoSuchFieldException
* @throws IllegalAccessException
*/
public static void upDateTitle(Class<?> entity,String fieIdName,String nameTitle) throws NoSuchFieldException, IllegalAccessException {
// 获取目标实体类的目标字段
Field field = entity.getDeclaredField(fieIdName);
// 获取该字段的注解
Excel annotation = field.getAnnotation(Excel.class);
// 获取Excel注解所持有的 InvocationHandler
InvocationHandler handler = Proxy.getInvocationHandler(annotation);
Field hFile = handler.getClass().getDeclaredField("memberValues");
// 设值私有可访问
hFile.setAccessible(true);
Map<Object, Object> map = (Map<Object, Object>) hFile.get(handler);
// 获取配置信息
map.put("name", nameTitle);
}
使用效果:
List<TestVO > list = new ArrayList();//TODO 此处需要获取自己的数据
//三个参数,导出标题名,sheetname,文件格式 HSSF:xls XSSH:xlsx
ExportParams params = new ExportParams("xxxxx表", "xxxx表", ExcelType.XSSF);
Class<?> entity = TestVO.class;
try {
ExcelUtil.upDateTitle(entity, "approveDeptName", "测试测试");
} catch (NoSuchFieldException e) {
log.error("错误", e);
} catch (IllegalAccessException e) {
log.error("错误", e);
}
Workbook workbook = ExcelExportUtil.exportExcel(params, entity, list);
//以流的形式导出
ExcelUtil.excelDerive(response, workbook, "xxxx表");
感谢以下博主:
参考
扩展:
上边的方法不知道咋处理多个sheet所以此方法应运而生:
/**
* 修改表头
* @param workbook excel对象
* @param sheetName sheet名称
* @param row 第几行
* @param cell 第几列
* @param newStr 新字符串
*/
public static void upDateTitle(Workbook workbook,String sheetName,int row,int cell,String newStr) {
Sheet sheet = workbook.getSheet(sheetName);
Cell cell1 = sheet.getRow(row).getCell(cell);
cell1.setCellValue(newStr);
}
应用:
List<TestVO > list = new ArrayList();//TODO 此处需要获取自己的数据
//三个参数,导出标题名,sheetname,文件格式 HSSF:xls XSSH:xlsx
ExportParams params = new ExportParams("xxxxx表头名称", "xxxxsheet名称", ExcelType.XSSF);
Class<?> entity = TestVO.class;
//try {
// ExcelUtil.upDateTitle(entity, "approveDeptName", "测试测试");
//} catch (NoSuchFieldException e) {
// log.error("错误", e);
//} catch (IllegalAccessException e) {
// log.error("错误", e);
//}
Workbook workbook = ExcelExportUtil.exportExcel(params, entity, list);
//序号从0开始,不是从1,从0开始,从0开始,从0开始重要的事情说三遍
try {
ExcelUtil.upDateTitle(workbook,"xxxxsheet名称",1,0,"测试测试");
} catch (NullPointerException e) {
log.error("错误", e);
}
//以流的形式导出
ExcelUtil.excelDerive(response, workbook, "xxxx表");
欢迎各路大神留言讨论