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


    开发环境

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

    License

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

    测试结果

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

    占位符

    常规占位 (¬_¬)…

  • 相关阅读:
    js中给一个元素添加事件
    asp.net客户端回调
    (转)web元素之input (javascript)功能
    在wcf中使用基于证书的授权和保护
    (转)IE与FireFox的js和css几处不同点
    IE&FF兼容性问题
    solaris UFS文件系统 要点
    perl命令行 代替 各种shell 一则
    nginx中的验证模块
    漂亮的正则,素数查找
  • 原文地址:https://www.cnblogs.com/L-Wirepuller/p/11000006.html
Copyright © 2020-2023  润新知