最近在使用poi做一个excel导入导出的功能,也看了不少例子,但是发现都是基于一张表进行的处理,也就是excel的导入导出操作的工具类或者是接口中都有导出后表头标题的定义,例如,数据库里有一列叫Name,在工具类中使用了setCellValue("名字")直接给定了导出列的标题,这样的话万一我有好多张表都需要做excel的导入导出操作的话,岂不是每个表都要建立一个工具类了,大家有没有比较好的方法能够做一个通用工具类或者接口,或者是说有看到过这样写的文章,分享学习一下
// 创建第一行 XSSFRow row1 = sheet.createRow(0); // 创建第一行第一列 XSSFCell row1Cell1 = row1.createCell(0); row1Cell1.setCellValue("基本信息"); row1Cell1.setCellStyle(titleStyle); // 创建第一行第二列 XSSFCell row1Cell2 = row1.createCell(3); row1Cell2.setCellValue("证件信息"); row1Cell2.setCellStyle(titleStyle);
若依框架中这个POI可以看看,应该可以满足你说的通用导出,只需要加个注解就好,代码网上就有
我看CSDN这个博文中的工具类应该能解决你的问题,只需要将 列 和 值 作为参数传入 writeExcel 就行,是一个通用的工具类。
https://blog.csdn.net/bourbon_zero/article/details/108347075
一个基于注解式的工具包 自己整理的 希望能帮得到你 https://juejin.cn/post/6899739087066890247
根据实体类的注解 可以自动校验excel数据
@Data
public class ProjectVo {
@FieldName(value = "项目")
private String name;
@FieldName(value = "电话")
private String phone;
@FieldName(value = "联系人")
private String person;
@FieldName(value = "金额")
private Double money;
@FieldName(value = "负责人" ,required = true)
private String processPeople;
@FieldName(value = "周期")
private String cycle;
@FieldName(value = "记录日期",dateFormat = "yyyy-MM-dd")
private Date date;
private String error;
private Integer rows;
}
导入入口
private static void testImport() throws IOException {
String fileUrl = "C:\\Users\\Administrator\\Desktop\\测试导出.xlsx";
Workbook workbook = ExcelUtil.readExcel(fileUrl, ProjectVo.class);
Sheet sheet = workbook.getSheet("sheet");
List <ProjectVo> list = ExcelImport.getInstance()
.setRowNum(0)
.setFieldRows("rows")
.isFormatTitle(true)
.setFieldError("error")
.transformation(sheet ,ProjectVo.class);
list.stream().forEach(e ->{
System.out.println(e.toString());
});
}
测试结果
刚工作那会写过通用版导入导出,楼上方法正解