zoukankan      html  css  js  c++  java
  • JXLS导出Excel(模板导出)

    1、导包

    在pom.xml中加入依赖如下:

         <dependency>
                <groupId>org.jxls</groupId>
                <artifactId>jxls</artifactId>
                <version>2.4.7</version>
            </dependency>
            <dependency>
                <groupId>org.jxls</groupId>
                <artifactId>jxls-poi</artifactId>
                <version>1.0.16</version>
            </dependency>

    2、创建导出Excel的模板,实例如下:图1中的表达式(jx:each(items="object",var="order",lastCell="E4")),此处的object要与JxlsExporter.java中返回的集合的“键”保持一,下面给出可处理父子级关系的批注展示,类似于jstl中的each

    图1 父级数据

    图2 子级数据

    图3 头部批注

     说明:通过批注的形式,指定“作用域”范围,上图中lastCell表示在该坐标内输入表达式有效。

    3、获取列表数据,并导出Excel,JxlsExporter.java 代码如下

    package com.inmansoft.base.util; //template模板路径
    
    import com.inmansoft.base.model.plan.LsBaseOrder;
    import com.inmansoft.base.model.plan.LsDeptOrder;
    import lombok.extern.slf4j.Slf4j;
    import org.jxls.common.Context;
    import org.jxls.transform.poi.PoiContext;
    import org.jxls.util.JxlsHelper;
    
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Random;
    
    /**
     * <p>title:</p>
     * <p>description:</p>
     *
     * @author: zsj
     * @date Created in 2019-01-06
     * @modified By zsj
     */
    @Slf4j
    public class JxlsExporter {
        private static String template = "leadshow.xls";
        private static String output = "target/export_leadshow.xls";
    
        public static void main(String[] args) throws IOException {
            log.info("导出数据");
            execute();
        }
    
        public static void execute() throws IOException {
            List<LsBaseOrder> lsBaseOrders = createLsBaseOrders(6);
            log.info("Opening input stream");
            //template 为模板路径:eg:leadshow.xls,
            // JxlsExporter.class.getResourceAsStream(template)—> leadshow.xls模板路径需放置在该类包路径下
            try (InputStream is = JxlsExporter.class.getResourceAsStream(template)) {
                //output 为导出的Excel路径,有一个坑需要注意的是,在springboot项目打包成jar包之后,
                //导出文件路径可这样表示: System.getProperty("user.dir") + "/export_leadshow.xls",这种"static/export_leadshow.xls"路径会失效
                try (OutputStream os = new FileOutputStream(output)) {
                    Context context = new PoiContext();
                    context.putVar("object", lsBaseOrders);
                    JxlsHelper.getInstance().processTemplate(is, os, context);
                }
            }
        }
    
        public static List<LsBaseOrder> createLsBaseOrders(int num) {
            List<LsBaseOrder> lsBaseOrders = new ArrayList<>();
            Random random = new Random();
            for (int i = 1; i <= num; i++) {
                LsBaseOrder item = new LsBaseOrder();
                item.setItemName("2835 LED硬灯条" + i);
                item.setItemSpec("60珠 8500K");
                item.setSimpleCode("简码-" + i);
                item.setCompanyName("华为公司");
    
                List<LsDeptOrder> lsDeptOrders = new ArrayList<>();
                item.setChildren(lsDeptOrders);
                for (int j = 1; j <= random.nextInt(10); j++) {
                    LsDeptOrder deptOrder1 = new LsDeptOrder();
                    deptOrder1.setItemName("变压器" + j);
                    deptOrder1.setFullNum(12);
                    lsDeptOrders.add(deptOrder1);
                }
                lsBaseOrders.add(item);
            }
            return lsBaseOrders;
        }
    }

    模板路径如下:(与上面Java类包路径一致)

  • 相关阅读:
    作业16
    递归函数
    三元表达式与生成式
    迭代器与生成器
    作业15
    装饰器
    作业14
    string的入门与进阶
    修理牧场(优先队列)
    旅游规划
  • 原文地址:https://www.cnblogs.com/Crysta1/p/10250270.html
Copyright © 2011-2022 走看看