poi 工具类,excel的快速导入导出,excel模板导出,word模板导出,可以仅仅5行代码就可以完成excel的导入导出,修改导出格式简单粗暴,快速有效,easypoi值得你尝试
目前来说,easypoi确实方便,官网也提供了三种不同的版本,它在开源中国还,还是非常出名的,用的人非常多,也是对他的一个认可。
www.887551.com目前的项目,也是用这个来做,今天我们来做个excel的导入导出例子,看看怎么使用?
目前官方提供最新版本是4.2.0,但是我在使用过程中,总是报错,时间关系就没怎么去查找,有兴趣的同学可以呀研究一下,类找不到,这个是apache的一个类,估计是新版本需要引入别的包,没去仔细追究。
java.lang.noclassdeffounderror: org/apache/poi/xssf/urmodel/xssfworkbook
<!-- springboot核心web --> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> </dependency> <!-- 引入easypoi包 --> <dependency> <groupid>cn.afterturn</groupid> <artifactid>easypoi-spring-boot-starter</artifactid> <version>4.1.0</version> </dependency> <dependency> <groupid>commons-fileupload</groupid> <artifactid>commons-fileupload</artifactid> <version>1.4</version> </dependency>
/** * excel枚举类型 * @author:溪云阁 * @date:2020年5月29日 */public enum exceltypeenum { xls("xls"), xlsx("xlsx"); private string value; private exceltypeenum(string value) { this.value = value; } public string getvalue() { return value; } public void tvalue(string value) { this.value = value; }}
/** * excel导出工具类 * @author:溪云阁 * @date:2020年5月29日 */@componentpublic class excelexportutils { @autowired private httprvletrespon respon; /** * 导出excel * @author 溪云阁 * @param list 泛型数据 * @param title 标题 * @param sheetname sheet的名称 * @param pojoclass 需要导出的对象 * @param filename 文件名称 * @param iscreateheader 是否创建表头 * @throws ioexception void */ public void exportexcel(list<?> list, class<?> pojoclass, string title, string sheetname, string filename, boolean iscreateheader) throws ioexception { final exportparams exportparams = new exportparams(title, sheetname, exceltype.xssf); exportparams.tcreateheadrows(iscreateheader); baexport(list, pojoclass, filename, exportparams); } /** * 导出excel * @author 溪云阁 * @param list 泛型数据 * @param title 标题 * @param sheetname sheet的名称 * @param pojoclass 需要导出的对象 * @param filename 文件名称 * @param respon * @throws ioexception void */ public void exportexcel(list<?> list, class<?> pojoclass, string title, string sheetname, string filename) throws ioexception { baexport(list, pojoclass, filename, new exportparams(title, sheetname, exceltype.xssf)); } /** * 导出excel * @author 溪云阁 * @param list 泛型数据 * @param pojoclass 需要导出的对象 * @param filename 文件名称 * @param exportparams 文件书香 * @param respon * @throws ioexception void */ public void exportexcel(list<?> list, class<?> pojoclass, string filename, exportparams exportparams) throws ioexception { baexport(list, pojoclass, filename, exportparams); } /** * 多个sheet导出 * @author 溪云阁 * @param list * @param filename * @throws ioexception void */ public void exportexcel(list<map<string, object>> list, string filename) throws ioexception { baexport(list, filename); } /** * 最基础的对象导出 * @author 溪云阁 * @param list 数据列表 * @param pojoclass 导出对象 * @param filename 文件名称 * @param exportparams 导出文件属性 * @throws ioexception void */ private void baexport(list<?> list, class<?> pojoclass, string filename, exportparams exportparams) throws ioexception { final workbook workbook = excelexportutil.exportexcel(exportparams, pojoclass, list); downloadexcel(filename, workbook); } /** * 最基础的多sheet导出 * @author 溪云阁 * @param list 多个不同数据对象的列表 * @param filename 文件名称 * @throws ioexception void */ private void baexport(list<map<string, object>> list, string filename) throws ioexception { final workbook workbook = excelexportutil.exportexcel(list, exceltype.hssf); downloadexcel(filename, workbook); } /** * 文件下载 * @author 溪云阁 * @param filename 文件名称 * @param workbook exce对象 * @throws ioexception void */ private void downloadexcel(string filename, workbook workbook) throws ioexception { rvletoutputstream output = null; try { final string downloadname = urlencoder.encode(filename + "." + exceltypeenum.xlsx.getvalue(), "utf-8"); respon.tchara因果联想cterencoding("utf-8"); respon.theader("content-type", "application/vnd.ms-excel"); respon.theader("content-disposition", "attachment;filename=" + downloadname); output = respon.getoutputstream(); workbook.write(output); } catch (final exception e) { throw new ioexception(e.getmessage()); } finally { if (output != null) { output.flush(); output.clo(); } } }}
/** * excel导入工具类 * @author:溪云阁 * @date:2020年5月29日 */@componentpublic class excelimportutils { /** * 从指定位置获取文件后进行导入 * @author 溪云阁 * @param filepath 文件路径 * @param titlerows 表格标题行数,默认0 * @param headerrows 表头行数,默认1 * @param pojoclass 上传后需要转化的对象 * @return * @throws ioexception list<t> */ public <t> list<t> importexcel(string filepath, integer titlerows, integer 跳房子headerrows, class<t> pojoclass) throws exception { if (strings.impty(filepath)) { return null; } el { final importparams params = new importparams(); // 表格标题行数,默认0 params.ttitlerows(titlerows); // 表头行数,默认1 params.theadrows(headerrows); // 是否需要保存上传的excel params.tneedsave(true); // 保存上传的excel目录 params.tsaveurl("/excel/"); return excelimportutil.importexcel(new file(filepath), pojoclass, params); } } /** * 上传文件导入 * @author 溪云阁 * @param file * @param titlerows 标题行 * @param headerrows 表头行 * @param needverfiy 是否检验excel内容 * @param pojoclass 导入的对象 * @return * @throws exception list<t> */ public <t> list<t> importexcel(multipartfile file, integer titlerows, integ舞龙舞狮表演er headerrows, boolean needverfiy, class<t> pojoclass) throws exception { if (file == null) { return null; } el { return baimport(file.getinputstream(), titlerows, headerrows, needverfiy, pojoclass); } } /** * 最基础导入 * @author 溪云阁 * @param inputstream * @param titlerows 表格标题行数,默认0 * @param headerrows 表头行数,默认1 * @param needverify 是否需要检测excel * @param pojoclass 导入的对象 * @return * @throws ioexception list<t> */ private <t> list<t> baimport(inputstream inputstream, integer titlerows, integer headerrows, boolean needverify, class<t> pojoclass) throws exception { if (inputstream == null) { return null; } el { final importparams params = new importparams(); params.ttitlerows(titlerows); params.theadrows(headerrows); par亚寒带ams.tsaveurl("/excel/"); params.tneedsave(true); params.tneedverify(needverify); return excelimportutil.importexcel(inputstream, pojoclass, params); } }}
这里,为了覆盖更全一点,我分别用了不同的类型来做实验,数字类型采用numberformat进行格式化操作。
/** * 用户信息 * @author:溪云阁 * @date:2020年5月29日 */public class ur implements rializable { // 数字格式化 private numberformat nf = numberformat.getnumberinstance(); private static final long rialversionuid = 1l; @excel(name = "用户id", ordernum = "0", width = 15) @tter @getter private long urid; @excel(name = "性别", ordernum = "1", width = 15, replace = { "男_1", "女_2" }, suffix = "孩") @tter @getter private int x; @excel(name = "金钱", ordernum = "2", width = 15) @tter private double money; public string getmoney() { return nf.format(money); } @excel(name = "用户信息", ordernum = "3", width = 15) @tter @getter private string urname; @excel(name = "价格", ordernum = "4", width = 15) @tter @getter private float price; @excel(name = "时间", ordernum = "5", width = 15, format = "yyyy-mm-dd") @tter @getter private date now;}
/** * excel导入导出 * @author:溪云阁 * @date:2020自从遇见你 吕雯年5月29日 */@api(tags = { "app服务:数据接口" })@restcontroller@requestmapping("view/ie")public class importexportcontroller { @autowired private excelexportutils excelexportutils; @autowired private excelimportutils excelimportutils; /** * 导出用户信息 * @author 溪云阁 void */ @apioperation(value = "导出excel") @getmapping(value = "/exportexcel") public void exportexcel() throws exception { final list<ur> urlist = new arraylist<>(); for (int i = 0; i < 10; i++) { final ur ur = new ur(); ur.turid(i); ur.tx(1); ur.tmoney(12332123 + i); ur.turname("小明" + i); ur.tprice(23.1f + i); ur.tnow(new date()); urlist.add(ur); } excelexportutils.exportexcel(urlist, ur.class, "用户信息", "员工信息的sheet", "用户信息表"); } /** * 导入用户信息 * @author 溪云阁 * @param file * @return * @throws ioexception object */ @apioperation(value = "导入excel") @getmapping(value = "/importexcel") public responmsg<list<ur>> importexcel(@requestparam("file") multipartfile file) throws exception { final list<ur> urlist = excelimportutils.importexcel(file, 1, 1, fal, ur.class); return msgutils.buildsuccessmsg(urlist); }}
在导出中,直接在浏览器输入地址接口,结果如截图所示
其中,金钱,时间上,我们分别进行了格式化
把刚刚导出来的文件,直接导入进去,这里采用postman进行操作,其中要注意的点,我已经用红色的圈圈标出来。
从实验结果上看,已经可以导入进去,并且把数据返回来
在导入进去的构成中,这里留下一个问题给同学自行解决,导入的金额是0,可自行研究解决
本文发布于:2023-04-05 06:11:46,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/ea96e1d29e6db496b4134664d6ba6697.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:postman导出excel文件(postman批量发送请求).doc
本文 PDF 下载地址:postman导出excel文件(postman批量发送请求).pdf
留言与评论(共有 0 条评论) |