Java按模板导出Excel———基于Aspose实现
程序员文章站
2022-03-20 08:37:37
[TOC] 开发环境 1. jdk 1.8 2. Maven 3.6 3. SpringBoot 2.1.4.RELEASE 4. aspose cells 8.5.2 5. Idea 或 参照: "基于SpringBoot构建分模块项目" 先看效果 模板: 导出后效果: 引入jar包 pom.xm ......
目录
开发环境
- jdk 1.8
- maven 3.6
- springboot 2.1.4.release
- aspose-cells 8.5.2
- idea
或
先看效果
模板:
导出后效果:
引入jar包
pom.xml
如遇到jar无法下载的情况,可自行下载到本地,然后手动添加到项目中
<dependencies> <!-- 你的其他jar --> <!-- aspose --> <dependency> <groupid>com.aspose</groupid> <artifactid>aspose-cells</artifactid> <version>8.5.2</version> </dependency> </dependencies> <repositories> <repository> <id>asposejavaapi</id> <name>aspose java api</name> <url>http://repository.aspose.com/repo/</url> </repository> </repositories>
校验许可证
aspose默认引入的是评估版(未指定许可证),此版本可使用全部功能,但是有以下两个限制:
- 运行程序时,只能打开100个excel文件。如果您的应用程序超过此数量,将引发异常。
- 带有评估水印的工作表
如果你的应用场景不能接受以上两点限制,可在官网购买许可证,然后通过校验许可证解除限制;如果你可以接受,请忽略此操作;
官网提供多种校验方式,此处只列举其中一种将license配置在项目中
在resources包下添加license.xml
创建asposeutils工具类,添加方法校验方法
package com.wayne.common.utils; import com.aspose.cells.license; import java.io.inputstream; /** * aspose工具类 * @author wayne * @date 2019/6/10 */ public class asposeutils { /** * 校验aspose的license */ private static boolean checklicense() { try { inputstream license = asposeutils.class.getclassloader().getresourceasstream("license.xml"); license aposelic = new license(); aposelic.setlicense(license); } catch (exception e) { e.printstacktrace(); } return license.islicenseset(); } }
导出方法
此处列举为较简单的单个sheet,且不分页导出,更多使用方式请参考官网文档
package com.wayne.common.utils; import com.aspose.cells.license; import com.aspose.cells.workbook; import com.aspose.cells.workbookdesigner; import java.io.inputstream; import java.util.list; /** * aspose工具类 * @author wayne * @date 2019/6/10 */ public class asposeutils { /** * @param head 单个对象,将对象作为此参数传入。如没有,传入null * @param list 多个对象时,将对象作为此参数传入。如没有,传入null * @param templatename 模板所在的位置,如:e:/template/studenttemplate.xlsx * @param resultfilepath 生成后的文件所存放的文件夹,如:e:/data/ * @return 生成后的文件路径及文件名,如:e:/data/student.xlsx */ public static <h> string exportexcelbyasposewithtemplate(h head, list list, string templatename, string resultfilepath) { // 校验许可证 if(!checklicense()) { return null; } // 生成后文件名 string resultfile = resultfilepath + system.currenttimemillis() + ".xlsx"; try { // 加载模板 workbook wb = new workbook(templatename); // 加载设计器 workbookdesigner designer = new workbookdesigner(); designer.setworkbook(wb); // 单个对象和集合区分(在模板中定义方式不同) if(null != head) { designer.setdatasource("head", head); } if(null != list) { designer.setdatasource("list", list); } designer.process(); wb.save(resultfile); wb.dispose(); } catch (exception e) { e.printstacktrace(); } return resultfile; } /** * 校验aspose的license */ private static boolean checklicense() { try { inputstream license = asposeutils.class.getclassloader().getresourceasstream("license.xml"); license aposelic = new license(); aposelic.setlicense(license); } catch (exception e) { e.printstacktrace(); } return license.islicenseset(); } }
测试结果
@test public void exportexcelbyasposewithtemplatetestcase() { string templatename = "e:/temp/template.xlsx"; string resultfilepath = "e:/temp/"; // 单个对象测试 userone userone = new userone(); userone.setid(1); userone.setusername("tom"); userone.setpassword("123123"); // 集合测试 list<usertwo> lists = new arraylist<>(); for(int i = 0; i < 10; i++) { usertwo temp = new usertwo(); temp.setid(i*10); temp.setusername(string.valueof((i*100))); lists.add(temp); } string resultfilename = asposeutils.exportexcelbyasposewithtemplate(userone, lists, templatename, resultfilepath); assert null != resultfilename; }
运行测试用例,绿了~~~
占位符
常规占位 (¬_¬)…
上一篇: 地铁搭讪
下一篇: 未来五年 中国SaaS市场增速将会翻倍