欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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 ......

目录

开发环境

  1. jdk 1.8
  2. maven 3.6
  3. springboot 2.1.4.release
  4. aspose-cells 8.5.2
  5. idea

参照: 基于springboot构建分模块项目

先看效果

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

导出后效果:Java按模板导出Excel———基于Aspose实现

引入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

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

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

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

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

占位符

常规占位 (¬_¬)…