项目要求,把数据库中的数据进行导入导出成Excel文档,利用Java POI框架来进行操作
导入POI的依赖包:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
由于工具类封装的代码太多,就不在文章中写中,可以去本人的github或者gitee上下载源码,readme.MD中有说明如何操作封装的源码;
github地址:https://github.com/Chenbin1996/excel.git
gitee地址:https://gitee.com/ruxuanwo/excel.git
接着就可以在业务逻辑层中进行操作,导入的话,需要前端传入一个流,后台根据这个流进行工具类的操作,再将数据插入到数据库中,还有要注意的是,实体类中的注解一定要和传入的内容相对应,String类型可以为空,其他类型不可以,不然导入失败,你想要导入什么内容,就在实体类属性上加上注解。
public Result excelImport(MultipartFile file) {
InputStream stream =null;
try{
stream = file.getInputStream();
}catch (IOException e) {
e.printStackTrace();
}
List<Object> list = ExcelImportUtil.importExcel(PmProject.class,stream);
for(Object o : list) {
PmProject pmProject = (PmProject) o;
pmProjectService.save(pmProject);
}
if(list != null|| list.size() != 0){
returnResponseMsgUtil.success(null);
}else{
returnResponseMsgUtil.failure();
}
}
导出的话看你想要导出什么字段内容给客户,如果客户是要这张表的所有内容,那就查出所有内容,利用工具类操作,将查到的所有内容生成文档供客户下载,下载的话只需要更改一下前端的请求数据表头即可;若只要几个字段的内容,那就需要另做查询,将需要的几个字段查出导出
public Result excelExport(HttpServletResponse response) {
List<PmProject> list =pmProjectService.findAll(); //这里我是查询出所有
Workbook sheets = ExcelExportUtil.exportWorkbook(list);
try{
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
response.addHeader("Content-Disposition","attachment;filename=" + new String(Constant.EXPORT_NAME.getBytes(),"ISO-8859-1") + ".xls");
OutputStream stream = response.getOutputStream();
sheets.write(stream);
stream.flush();
stream.close();
}catch(IOException e){
e.printStackTrace();
returnResponseMsgUtil.failure();
}
return ResponseMsgUtil.success(null);
}
new String(Constant.EXPORT_NAME.getBytes(),是用户下载之后文档的名称,这里是定义的一个常量类中的一个名称,什么表就什么名字导出