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类包路径一致)

原文地址:https://www.cnblogs.com/Crysta1/p/10250270.html