jxls2.4.5如何動態(tài)導出excel表頭與數(shù)據(jù)
在之前的文章中,介紹了jxls的基礎使用。但導出表頭屬于寫死的,并未采取動態(tài)渲染。
本次進行動態(tài)渲染操作,動態(tài)渲染表頭和填充數(shù)據(jù)。
依賴引入
springboot測試項目中,引入下列依賴以及版本。
<dependency>
<groupId>org.jxls</groupId>
<artifactId>jxls</artifactId>
<version>2.4.5</version>
</dependency>
<dependency>
<!-- 可以使用poi的實現(xiàn)也可以用jexcelapi的 -->
<groupId>org.jxls</groupId>
<artifactId>jxls-poi</artifactId>
<version>1.0.15</version>
</dependency>
<dependency>
<groupId>org.jxls</groupId>
<artifactId>jxls-jexcel</artifactId>
<version>1.0.7</version>
</dependency>
<dependency>
<groupId>net.sf.jxls</groupId>
<artifactId>jxls-core</artifactId>
<version>1.0.6</version>
</dependency>制作導出模板
導出模板依舊采取批注的方式,進行定義內(nèi)容范圍、表頭區(qū)域、數(shù)據(jù)區(qū)域。

A1中的批注如下:
jx:area(lastCell=”A3”)
指定一條數(shù)據(jù)填充時的范圍。
A2中的批注如下:
jx:grid(lastCell=“A3” headers=“hDatas” data=“bDatas” areas=[A2:A2, A3:A3] formatCells=“BigDecimal:C1,Date:D1”)
headers指定哪個list集合屬于動態(tài)表頭數(shù)據(jù)。data指定使用哪個數(shù)據(jù)集合作為數(shù)據(jù)渲染源。areas指定表頭和數(shù)據(jù)的范圍。A2:A2 表示 表頭數(shù)據(jù)的區(qū)域。A3:A3 表示 第一個數(shù)據(jù)單元格所在的區(qū)域。formatCells官方文檔說的是指定數(shù)據(jù)格式,測試時不屬于必填項。
測試類
package cn.xj.controller;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import org.jxls.common.Context;
import org.jxls.util.JxlsHelper;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import java.io.*;
import java.util.*;
@Slf4j
public class Test3 {
public static void main(String[] args) throws Exception {
//Map<String, Object> map = new HashMap();
Context context = new Context();
// 動態(tài)頭
context.putVar("hDatas", Arrays.asList("編號","名稱","年齡","郵箱"));
// 數(shù)據(jù)集合
List<List<Object>> dataList = Lists.newArrayList();
for (int i = 0; i < 10; i++) {
List<Object> list = new ArrayList<>();
Map<String, Object> params = new HashMap<>();
list.add("1_"+i);
list.add("xj_"+i);
list.add(22);
list.add("專注寫bug測試中文");
dataList.add(list);
}
// ${item.num}
context.putVar("bDatas",dataList);
Resource resource = new ClassPathResource("/report/test_user2.xlsx");
InputStream is = resource.getInputStream();
String outFile = System.getProperty("user.dir")+ File.separator+"springboot-poi"+File.separator+"pdf"+File.separator+System.currentTimeMillis()+ ".xlsx";
OutputStream outputStream = new FileOutputStream(outFile);
JxlsHelper.getInstance().processTemplate(is, outputStream, context);
}
}導出效果

注意事項
1、表頭的數(shù)據(jù)格式為List<String>。
2、數(shù)據(jù)部分的格式為List<List<Object>>?;蛘?code>List<xxxxPo>,但第2種數(shù)據(jù)格式暫未進行驗證。
3、使用動態(tài)表頭方式,必須使用org.jxls.common.Context來承接數(shù)據(jù)信息。
Context context = new Context(); // 動態(tài)頭 context.putVar(“hDatas”, Arrays.asList(“編號”,“名稱”,“年齡”,“郵箱”)); // 數(shù)據(jù)集合 List<List> dataList = Lists.newArrayList(); context.putVar(“bDatas”,dataList);
4、表頭與數(shù)據(jù)單元格部分,必須強制使用${header}和${cell}。自定義命名會導致數(shù)據(jù)不會填充!


總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Java如何將int型數(shù)組轉為String型數(shù)組
這篇文章主要介紹了Java如何將int型數(shù)組轉為String型數(shù)組,本文給大家分享具體實現(xiàn)思路結合實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧2024-03-03
Mybatis 入門之MyBatis環(huán)境搭建(第一篇)
Mybatis的前身叫iBatis,本是apache的一個開源項目, 2010年這個項目由apache software foundation 遷移到了google code,并且改名為MyBatis。這篇文章主要介紹了Mybatis入門第一篇之MyBaits環(huán)境搭建,需要的朋友參考下2016-12-12
SpringBoot集成validation校驗參數(shù)遇到的坑
這篇文章主要介紹了SpringBoot集成validation校驗參數(shù)遇到的坑,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12
java如何實現(xiàn)遞歸刪除樹形數(shù)據(jù)的任一個節(jié)點
文章講述了在Java中實現(xiàn)遞歸刪除樹形數(shù)據(jù)的任一個節(jié)點時需要注意的三個點,包括刪除的節(jié)點包含子節(jié)點、刪除子節(jié)點和其他子節(jié)點刪除的節(jié)點不包含子節(jié)點、以及該父節(jié)點變成葉子節(jié)點,此外,文章還提到這兩件事包含在同一件事務中2024-12-12
JAVA解決在@autowired,@Resource注入為null的情況
這篇文章主要介紹了JAVA解決在@autowired,@Resource注入為null的情況,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10
Struts2.5版本struts.xml與web.xml配置的更改方法
這篇文章主要給大家介紹了關于Struts2.5版本中struts.xm與web.xml配置的更改方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2018-11-11

