Java按模板导出Excel―――基于Aspose实现

匿名 (未验证) 提交于 2019-12-02 21:40:30

Ŀ¼

  1. jdk 1.8
  2. Maven 3.6
  3. SpringBoot 2.1.4.RELEASE
  4. aspose-cells 8.5.2
  5. Idea

基于SpringBoot构建分模块项目

模板:

导出后效果:

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; }

运行测试用例,绿了~~~

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!