最近正在做OA,需求需要导入导出EXCEL ,功能和方法使用起来挺简单,做起来发现类型问题比较坑,自己稍微封装了一下,
大致功能就是 通过传入实体类的class对象和 Sheet 工作簿对象获取 从Excel文件中获取,实体类集合。
excel2003的.xls格式 对应是HSSFCell,而之后的xlsx对应的则是XSSFCell,但是他们都继承于Cell,所以使用Cell就可以使用两种格式的excel导入了
对于不想导入的字段
自定义一个注解,在实体类中的属性上标注,相应的Excel中也不该有该字段
有一点不好的是:excel中字段顺序需要和实体类中属性顺序一致,且有自定义注解的属性不应该出现在Excel中
有时间我会对扩展性和通用性做进一步封装和处理
- 这里 注解名为NoExport 是因为之前写导出的时候命名,额 就没有改了
/**
* 自定义标签 : 标注了的对象不导出导入
* @author huang
*
*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface NoExport {
}
@RequestMapping("/XXXXX")
public String includeEmp(MultipartFile multfile ) throws Exception {
try {
//自己封装的 导入功能类
ImportExcel ie = new ImportExcel();
POIFSFileSystem fs = new POIFSFileSystem(multfile.getInputStream());
HSSFWorkbook wb = new HSSFWorkbook(fs);
//获取导入的员工集合
List<Employee> emplist = new ArrayList<>();
if ( wb.getSheet("Employee表")!=null ) {
emplist = (List<Employee>) ie.getListBySheet(wb.getSheet("Employee表"), Employee.class);
}
List<Department> deplist = new ArrayList<>();
//获取导入的职工的集合
if ( wb.getSheet("Department表")!=null ) {
deplist = (List<Department>) ie.getListBySheet(wb.getSheet("Department表"), Department.class);
}
}
导入功能类
- 方式一:根据实体类的 Field 的类型来判断处理
- 方式二:根据Cell 类型 判断处理
-
- 单元格类型 描述
CELL_TYPE
- 单元格类型 描述