项目中需要excel文件的导入与导出excel并下载,例如,导入员工信息,导出员工信息,手动输入比较繁琐,所以本篇博文教大家如何在java中导入excel文件与导出excel文件
技术栈
excel工具:easyexcel
选用框架:spring、spring mvc、mybatis(ssm)
项目构建管理工具:maven
需求:
1.要求利用excel工具实现员工信息的导入与导出
2.导出要求为输出到指定位置并下载
3.导入文件导入后,存入数据库,并显示在页面
4.导出文件,点击导出后写入指定地址,并下载该文件
导入阿里巴巴easyexcel依赖
<dependency> <groupid>com.alibaba</groupid> <artifactid>easyexcel</artifactid> <version>2.1.6</version></dependency>
这里采用easyexcel,为什么不采用poi呢?
因为easyexcel是对poi做的一个升级,poi相对于笨重,easyexcel去除了一些poi比较繁琐的东西,所以easye建国70周年手抄报xcel比较轻量级,所以本文采用easyexcel
easyexcel是阿里巴巴的产品,poi是apache基金会的开源产品,easyexcel对poi做了一个升级
package com.wanshi.spring.entity;import com.alibaba.excel.annotation.excelignore;import com.alibaba.excel.annotation.excelproperty;import com.alibaba.excel.annotation.write.style.columnwidth;import lombok.allargsconstructor;import lombok.data;import lombok.noargsconstructor;@data@noargsconstructor@allargsconstructorpublic class employee { @excelignore private string noid; @columnwidth(20) @excelproperty("员工姓名") private string emp_name; @columnwidth(20) @excelproperty("员工年龄") private integer emp_age; @excelignore private integer emp_x; //冗余字段 @columnwidth(20) @excelproperty("员工性别") private string str_emp_x; @columnwidth(20) @excelproperty("员工工资") private double emp_salary; @columnwidth(20) @excelproperty("员工住址") private string emp_address; @columnwidth(20) @excelproperty("员工岗位") private string emp_position; //分页相关,当前页与每页的数据条数 @excelignore private integer pagenum; @excelignore private integer pagesize;}
employeelistener类:
package com.wanshi.spring.listener;import com.alibaba.excel.context.analysiscontext;import com.alibaba.excel.event.analysiventlistener;import com.wanshi.spring.entity.employee;import java.util.arraylist;import java.util.list;public class employeereadlistener extends analysiventlistener<employee> { //员工集合 private static list<employee> employeelist = new arraylist<>(); // 每读一样,会调用该invoke方法一次 @override public void invoke(employee data, analysiscontext context) { employeelist.add(data); system.out.pri经历可数吗ntln("解析到一条数据:" + data); } // 全部读完之后,会调用该方法 @override public void doafterallanalyd(analysiscontext context) { system.out.println("全部解析完成"); } /** * 返回读取affect到的员工集合 * @return */ public static list<employee> getstudentlist() { return em安徽名人ployeelist; }}
test测试类实现文件导入并存入数据库
@testpublic void test1(){ excelreaderbuilder workbook = easyexcel.read ("c:\\urs\\王会称\\desktop\\员工.xlsx", employee.class, new employeereadlistener()); // 封装工作表 excelreadersheetbuilder sheet1 = workbook.sheet(); // 读取 sheet1.doread(); //写入数据库 list<employee> studentlist = employeereadlistener.getstudentlist(); for (employee employee : studentlist) { employee.tnoid(pbcretutils.uuid()); employeemapper.inrt(employee); }}
通过页面点击导入文件并存入数据库
employeecontroller类:
@postmapping("/import_employee_excel")public string importemployeeexcel(multipartfile emp_excel) { employeervice.importexcel(emp_excel); return "redirect:/employee/list";}
employeervice类:
/** * 获取用户选择的文件并将文件存入指定位置再将数据存入数据库 * @param emp_excel * @return */public integer importexc懂你作文el(multipartfile emp_excel) { try { string filename = fileuploadutil.upload(emp_excel, ""); excelreaderbuilder workbook = easyexcel.read (globalt.upload_url+filename, employee.class, new employeereadlistener()); // 封装工作表 excelreadersheetbuilder sheet1 = workbook.sheet(); // 读取 sheet1.doread(); list<employee> studentlist = employeereadlistener.getstudentlist(); for (employee employee : studentlist) { employee.tnoid(pbcretutils.uuid()); if ("男".equals(employee.getstr_emp_x())) { employee.temp_x(1); } el { employee.temp_x(2); } employeemapper.inrt(employee); } } catch (ioexception e) { e.printstacktrace(); } return 0;}
test测试类导出文件到指定文件
@testpublic void test2() throws filenotfoundexception { list<employee> employeelist = initdata(); excelwriterbuilder workbook = easyexcel.write(globalt.download_url, employee.class); // sheet方法参数: 工作表的顺序号(从0开始)或者工作表的名字 workbook.sheet("测试数据表").dowrite(employeelist); system.out.println("写入完成!");}/** * 生成测试数据 * @return */public list<employee> initdata() { list<employee> employeelist = new arraylist<>(); for (int i = 1; i < 100; i++) { employee employee = new employee(); employee.temp_name("小王说:"+i); employee.temp_age(19); if (i % 10 == 0) { employee.temp_x(1); } el { employee.temp_x(2); } employee.temp_salary(19999.00+i); employee.temp_address("北京市朝阳区"+i); employee.temp_position("java高级工程师"); employeelist.add(employee); } return employeelist;}
通过页面导出到指定文件后并下载文件
employeecontroller类
@getmapping("/export_employee_excel") public void exportemployeeexcel(httprvletrespon respon) { try { employeervice.exportemployeeexcel(respon); } catch (ioexception e) { e.printstacktrace(); } }
employeervice类:
public void exportemployeeexcel(httprvletrespon respon) throws ioexception { list<employee> kspwstudentatlist = list(); try { excelwriterbuilder workbook = easyexcel.write(globalt.download_url, employee.class); // sheet方法参数: 工作表的顺序号(从0开始)或者工作表的名字 workbook.sheet("员工信息").dowrite(kspwstudentatlist); downloadtempalate(respon); system.out.println("写入完成!"); } catch (exception e) { e.printstacktrace(); } } /** * 下载文件 * @param respon * @throws ioexception */ public static void downloadtempalate(httprvletrespon respon) throws ioexception { // 告诉浏览器用什么软件可以打开此文件 respon.theader("content-type", "application/vnd.ms-excel"); // 下载文件的默认名称 respon.theader("content-disposition", "attachment;filename=" + urlencoder.encode("员工信息.xlsx", "utf-8")); //4. 创建输入、输出流 fileinputstream input = new fileinputstream(globalt.download_url); rvletoutputstream sos = respon.getoutputstream(); //io流获取文件的字节流,然后再响应给浏览器 byte[] arr = new byte[1024]; int res = 0; while((res = input.read(arr)) > 0){ //将读取的内容输出到输出流中 sos.write(arr, 0, res); } input.clo(); sos.clo(); }
以上就是java+easyexcel实现文件的导入导出的详细内容,更多关于java easyexcel文件的导入导出的资料请关注www.887551.com其它相关文章!
本文发布于:2023-04-04 04:18:41,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/01ebc5b075c362b8aad3a3670e0c148a.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:Java+EasyExcel实现文件的导入导出.doc
本文 PDF 下载地址:Java+EasyExcel实现文件的导入导出.pdf
留言与评论(共有 0 条评论) |