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類包路徑一致)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM