易用宝项目记录day8-Excel的导入导出
易用宝项目记录day8-Excel的导入导出
1.EasyPOI集成SpringMVC完成导入导出
文档:http://easypoi.mydoc.io/
导包
注意:今天使用EasyPOI需要把之前的poi导包去掉
<!-- easypoi的支持 --> <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>3.2.0</version> </dependency> <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-web</artifactId><version>3.2.0</version> </dependency> <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-annotation</artifactId><version>3.2.0</version> </dependency>
修改domian
employee
@Entity//表示一个由jpa管理的持久对象,对应数据库的一个表 @Table(name = "employee")//table数据库的表名 public class Employee extends BaseDomain {@Excel(name = "用户名")@NotNull(message = "用户名不能为空!")private String username;private String password;@Excel(name = "邮箱", width = 25)private String email;@Excel(name = "头像", type = 2, width = 10, height = 20)private String headImage;@Excel(name = "年龄")@Max(value = 100, message = "年龄不能超过100岁!")@Min(value = 0, message = "年龄不能小于0岁!")@Column(length = 11)private Integer age;@Column(length = 1)private Integer isdelete;@ManyToMany@JoinTable(name = "employee_role",joinColumns = @JoinColumn(name = "employee_id"),inverseJoinColumns = @JoinColumn(name = "role_id"))private List<Role> roles = new ArrayList<>();@ManyToOne(fetch = FetchType.LAZY)@JoinColumn(name = "department_id")private Department department;
department
@Entity//表示一个由jpa管理的持久对象,对应数据库的一个表 @Table(name = "department")//table数据库的表名 public class Department extends BaseDomain {@Excel(name = "部门名称")private String name;
###2.在MVC里扫描view
<!--扫描easypoi中的结果视图-->
<context:component-scan base-package="cn.afterturn.easypoi.view" />
3. 配置视图解析器
p:order=“1” 先找这个bean的解析,再找其它的
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver" p:order="1" />
4. 前台传入相应的查询数据
<%--查询条--%><form id="searchForm" action="/employee/download">用户名:<input name="username" class="easyui-textbox" style="width:80px">邮箱:<input name="email" class="easyui-textbox" style="width:80px">部门:<input id="cc" name="departmentId" class="easyui-combobox" panelHeight="auto"data-options="valueField:'id',textField:'name',url:'/util/dept'"/><a href="#" data-method="search" class="easyui-linkbutton" iconCls="icon-search">查询</a><button type="submit" class="easyui-linkbutton" iconCls="icon-search">导出Excel</button></form>
5. 后台接收参数进行导出
注意:头像路径必需是真实路径
//下载Excel文件@RequestMapping("/download")public String download(ModelMap map, HttpServletRequest request, EmployeeQuery query) {List<Employee> list = employeeService.findByQuery(query);//获得头像真实路径String realPath = request.getSession().getServletContext().getRealPath("");list.forEach(e -> {e.setHeadImage(realPath + e.getHeadImage());});ExportParams params = new ExportParams("员工数据", "测试", ExcelType.XSSF);//冻结相应的行//params.setFreezeCol(2);// 数据集合map.put(NormalExcelConstants.DATA_LIST, list);//导出实体map.put(NormalExcelConstants.CLASS, Employee.class);//参数map.put(NormalExcelConstants.PARAMS, params);//文件名称map.put(NormalExcelConstants.FILE_NAME, "employee");//View名称return NormalExcelConstants.EASYPOI_EXCEL_VIEW;}
导入功能
1. 访问页面
ImportController
@Controller
@RequestMapping("/import")
public class ImportController {@Autowiredprivate IEmployeeService employeeService;@Autowiredprivate IDepartmentService departmentService;@Autowiredprivate EmployeeExcelVerifyHandler excelVerifyHandler;@RequestMapping("/index")public String index() {return "import";}
import.jsp
<form method="post" action="/import/empxlsx" enctype="multipart/form-data"><input class="easyui-filebox" name="empFile"data-options="prompt:'请选择一个excel文件',accept:'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel',validType:'isExcel'"style="width:80%"> <button id="sub" type="submit" disabled="disabled">导入Excel</button>
</form><!-- 注意:上传需要加enctype -->
<form method="post" action="/import/empXlsx" enctype="multipart/form-data"><input class="easyui-filebox" name="empFile" data-options="prompt:'选择一个excel文件..'" style="width:80%"><button class="easyui-linkbutton">导入</button>
</form>
2. 导入实现
上传解析器一定要有名字:multipartResolver 必需加一个默认密码
员工对应的部门必需有id(根据名称拿到对应的部门)
@RequestMapping("/empxlsx")public String empxlsx(MultipartFile empFile, HttpServletResponse response) throws Exception {/*System.out.println(empFile);System.out.println(empFile.getName()); //empFile:上传控件名称System.out.println(empFile.getOriginalFilename()); //emp.xlsx:上传的文件名称System.out.println(empFile.getSize()); //文件大小System.out.println(empFile.getContentType());//文件的memi类型*/InputStream inputStream = empFile.getInputStream();//准备一些导入的参数ImportParams params = new ImportParams();//要求导入的时候做验证params.setNeedVerfiy(true);//设置自定义的验证处理器params.setVerifyHandler(excelVerifyHandler);//params.setTitleRows(1);//params.setHeadRows(1);//把上传的excel文件中的数据变成Employee数据ExcelImportResult<Employee> result = ExcelImportUtil.importExcelMore(inputStream,Employee.class, params);//获取到引入成功的数据List<Employee> list = result.getList();//把员工进行保存list.forEach(e -> {//设置一个默认密码e.setPassword("123456");//设置默认为不删除e.setIsdelete(1);//根据名称到数据库中拿到部门Department department = e.getDepartment();if (department != null) {Department dbDept = departmentService.findByName(department.getName());e.setDepartment(dbDept);}employeeService.save(e);System.out.println(e);});return "import";}
导入验证
使用的是JSR 303 规范
###1.导入验证包
<dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>5.2.4.Final</version>
</dependency>
###2.加上验证的注解
employee
@Entity//表示一个由jpa管理的持久对象,对应数据库的一个表 @Table(name = "employee")//table数据库的表名 public class Employee extends BaseDomain {@Excel(name = "用户名")@NotNull(message = "用户名不能为空!")private String username;private String password;@Excel(name = "邮箱", width = 25)private String email;@Excel(name = "头像", type = 2, width = 10, height = 20)private String headImage;@Excel(name = "年龄")@Max(value = 100, message = "年龄不能超过100岁!")@Min(value = 0, message = "年龄不能小于0岁!")@Column(length = 11)private Integer age;@Column(length = 1)private Integer isdelete;@ManyToMany@JoinTable(name = "employee_role",joinColumns = @JoinColumn(name = "employee_id"),inverseJoinColumns = @JoinColumn(name = "role_id"))private List<Role> roles = new ArrayList<>();@ManyToOne(fetch = FetchType.LAZY)@JoinColumn(name = "department_id")private Department department;
###3. 加上自定义注解
这个类型是需要Spring扫描
@Component
public class EmployeeExcelVerifyHandler implements IExcelVerifyHandler<Employee> {@Autowiredprivate IEmployeeService employeeService;@Overridepublic ExcelVerifyHandlerResult verifyHandler(Employee employee) {//如果用户存在,我们就返回一个false// checkUsername:这个用户名是否可以使用if(!employeeService.checkUsername(employee.getUsername())){ExcelVerifyHandlerResult result = new ExcelVerifyHandlerResult(false);result.setMsg("用户名已经存在!");return result;}return new ExcelVerifyHandlerResult(true);}
}
###4.导入功能修改
要验证,必需设置 params.setNeedVerfiy(true);
自定义验证:params.setVerifyHandler(employeeExcelVerifyHandler);
result.getList(); 拿到所有通过验证的数据 result.getFailList():拿到所有错误的数据 result.getFailWorkbook();拿到错误的文本
@Autowired
private EmployeeExcelVerifyHandler employeeExcelVerifyHandler;
...
@RequestMapping("/empXlsx")
public String empXlsx(MultipartFile empFile, HttpServletResponse response) throws Exception{//准备一些导入的参数ImportParams params = new ImportParams();params.setTitleRows(1);params.setHeadRows(1);params.setNeedVerfiy(true); //需要做验证//设置验证处理器params.setVerifyHandler(employeeExcelVerifyHandler);//把上传的excel文件中的数据变成EmployeeExcelImportResult<Employee> result = ExcelImportUtil.importExcelMore(empFile.getInputStream(),Employee.class, params);//拿到相应的值List<Employee> list = result.getList();//把员工进行保存list.forEach(e -> {//设置一个默认密码e.setPassword("123456");//根据名称到数据库中拿到部门Department department = e.getDepartment();if(department!=null){Department dbDept = departmentService.findByName(department.getName());e.setDepartment(dbDept);}employeeService.save(e);});//拿到错误的值
// List<Employee> errList = result.getFailList();
// errList.forEach(e -> System.out.println("错误的:"+e));//有错误的情况进行导出if(result.isVerfiyFail()){//拿到错误的文件Workbook failWorkbook = result.getFailWorkbook();response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); //mime类型response.setHeader("Content-disposition", "attachment;filename=error.xlsx");response.setHeader("Pragma", "No-cache");//设置不要缓存OutputStream ouputStream = response.getOutputStream();failWorkbook.write(ouputStream);ouputStream.flush();ouputStream.close();}return "import";
}
易用宝项目记录day8-Excel的导入导出相关推荐
- Excel表格导入导出功能实现
## 01.员工管理-Excel导入功能介绍 ### 目标 在前面员工的添加是一个一个进行的,如果一次性添加多个员工信息,这时候就会很繁琐 因此需要我们开发一个批量导入的功能,将用户的信息存储到 ex ...
- 蓄力-利用POI进行excel的导入导出(包含图片)
这里写自定义目录标题 利用POI进行excel的导入导出 引入的jar包 excel导入 主方法: 将excel里面的图片转成数据 xls格式 xlsx格式 将图片数据转成字节流的方式传输到FTP服务 ...
- EasyPoi实现excel文件导入导出
EasyPoi学习实践 1 简介 easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板 ...
- EasyExcel实现Excel文件导入导出
1 EasyExcel简介 EasyExcel是一个基于Java的简单.省内存的读写Excel的开源项目.在尽可能节约内存的情况下支持读写百M的Excel. github地址: https://git ...
- excel winform 导入 导出_强大的 Excel 导入导出工具 hutool
" 最近项目上需要用到 Excel 的导入导出功能,想着之前使用的都有点麻烦,所以结合多方资料,终于找到了这个还算不错的 Excel 处理工具,一起来看" 今日安利好物名为 Hut ...
- java自定义注解实现excel数据导入导出,设置单元格数据验证与生成省市区多列联动效果
本文通过自定义注解实现excel数据导入导出.以及设置excel文件中列数据验证,即用户在excel文件中输入数据时就可以对数据格式验证是否符合,节省了程序中过多的数据验证操作,注解还额外提供了一系列 ...
- sqlserver 与access,excel互相导入导出代码
sqlserver 与access,excel互相导入导出代码 [转]http://hi.baidu.com/jiangfeng1225/blog/item/62c0e6088b30fbdb63d98 ...
- [Java中实现Excel表导入导出]基于easy-poi和EasyExcel两种方式实现
第一种:基于easy-poi实现Excel导入导出 1.导出Excel表格 第一步:在pom文件中导入依赖 <!--基于easy-poi实现Excel导入导出--><dependen ...
- 手摸手教学-利用原生POI对excel的导入导出以及阿里的easyexcel的基本操作
文章目录 原生POI对excel的导入导出以及阿里的easyexcel的基本操作 首先是最原始的POI操作excel 其次是POI操作excel对数据库的导入导出 最后是阿里的easyexcel的简单 ...
- 基于delphi的excel数据导入导出
因为淘宝客户的一个小需求,写了一个"基于delphi 7的excel数据导入导出"小工具.为了抛砖引玉,将这个小工具分享出来.希望对初学者和用得到的朋友有点点小小的帮助.oracl ...
最新文章
- OpenCV-Python:K值聚类
- 自学python三个月能赚钱吗-培训三个月拿“高薪”?起底人工智能“速成班”忽悠大法...
- DYNP_VALUES_READ
- 邊做邊學 Internet Explorer 8:瞭解 IE8 相容性技術
- JDK自带监控工具 jps、jinfo、jstat、jmap、jconsole
- springMVC 控制层添加异步线程
- 查找算法:折半查找算法实现及分析
- 彻底理解jdbc为什么用反射创建驱动程序对象
- I2C是什么,什么类型设备支持I2C,为什么要使用它?
- js模拟java的spring
- 安卓能硬改的手机机型_这款iPhone手机专属特效AR相机,我真的爱了
- 大数据应用之Windows平台Hbase客户端Eclipse开发环境搭建
- 模式识别人工神经网络BP算法
- word里画的流程图怎么全选_怎么用word画流程图
- 有隐藏分区如何激活win7旗舰版
- 三角函数的倍角、半角与降幂公式
- NTFS文件系统文件删除对比
- openwrt安装ipk报错“incompatible with the architectures configured”
- 机器人社社长事迹_社团先进个人事迹材料
- 用python3实现HDU爬虫(后续可能更新VJ)2016.11.4更新