jxls2.4.5如何動(dòng)態(tài)導(dǎo)出excel表頭與數(shù)據(jù)
在之前的文章中,介紹了jxls
的基礎(chǔ)使用。但導(dǎo)出表頭屬于寫(xiě)死的,并未采取動(dòng)態(tài)渲染。
本次進(jìn)行動(dòng)態(tài)渲染操作,動(dòng)態(tài)渲染表頭和填充數(shù)據(jù)。
依賴(lài)引入
springboot測(cè)試項(xiàng)目中,引入下列依賴(lài)以及版本。
<dependency> <groupId>org.jxls</groupId> <artifactId>jxls</artifactId> <version>2.4.5</version> </dependency> <dependency> <!-- 可以使用poi的實(shí)現(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>
制作導(dǎo)出模板
導(dǎo)出模板依舊采取批注
的方式,進(jìn)行定義內(nèi)容范圍
、表頭區(qū)域
、數(shù)據(jù)區(qū)域
。
A1
中的批注如下:
jx:area(lastCell=”A3”)
指定一條數(shù)據(jù)填充時(shí)的范圍
。
A2
中的批注如下:
jx:grid(lastCell=“A3” headers=“hDatas” data=“bDatas” areas=[A2:A2, A3:A3] formatCells=“BigDecimal:C1,Date:D1”)
headers
指定哪個(gè)list集合屬于動(dòng)態(tài)表頭數(shù)據(jù)。data
指定使用哪個(gè)數(shù)據(jù)集合作為數(shù)據(jù)渲染源。areas
指定表頭和數(shù)據(jù)的范圍。A2:A2 表示 表頭數(shù)據(jù)的區(qū)域。A3:A3 表示 第一個(gè)數(shù)據(jù)單元格所在的區(qū)域。formatCells
官方文檔說(shuō)的是指定數(shù)據(jù)格式,測(cè)試時(shí)不屬于必填項(xiàng)
。
測(cè)試類(lèi)
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(); // 動(dòng)態(tài)頭 context.putVar("hDatas", Arrays.asList("編號(hào)","名稱(chēng)","年齡","郵箱")); // 數(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("專(zhuān)注寫(xiě)bug測(cè)試中文"); 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); } }
導(dǎo)出效果
注意事項(xiàng)
1、表頭的數(shù)據(jù)格式為List<String>
。
2、數(shù)據(jù)部分的格式為List<List<Object>>
。或者List<xxxxPo>
,但第2種數(shù)據(jù)格式暫未進(jìn)行驗(yàn)證。
3、使用動(dòng)態(tài)表頭方式,必須使用org.jxls.common.Context
來(lái)承接數(shù)據(jù)信息。
Context context = new Context(); // 動(dòng)態(tài)頭 context.putVar(“hDatas”, Arrays.asList(“編號(hào)”,“名稱(chēng)”,“年齡”,“郵箱”)); // 數(shù)據(jù)集合 List<List> dataList = Lists.newArrayList(); context.putVar(“bDatas”,dataList);
4、表頭與數(shù)據(jù)單元格部分,必須強(qiáng)制使用${header}
和${cell}
。自定義命名會(huì)導(dǎo)致數(shù)據(jù)不會(huì)填充!
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java 如何給對(duì)象中的包裝類(lèi)設(shè)置默認(rèn)值
這篇文章主要介紹了java 如何給對(duì)象中的包裝類(lèi)設(shè)置默認(rèn)值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03springboot驗(yàn)證碼生成以及驗(yàn)證功能舉例詳解
登錄注冊(cè)是大部分系統(tǒng)需要實(shí)現(xiàn)的基本功能,同時(shí)也會(huì)對(duì)登錄驗(yàn)證增加需求,下面這篇文章主要給大家介紹了關(guān)于springboot驗(yàn)證碼生成以及驗(yàn)證功能的相關(guān)資料,需要的朋友可以參考下2023-04-04springboot后端配置多個(gè)數(shù)據(jù)源、Mysql數(shù)據(jù)庫(kù)的便捷方法
實(shí)現(xiàn)springboot 后端配置多個(gè)數(shù)據(jù)源、Mysql數(shù)據(jù)庫(kù),只需要新建 Mapper、實(shí)體類(lèi) 相應(yīng)的文件夾,將不同數(shù)據(jù)源的文件保存到對(duì)應(yīng)的文件夾下,添加綁定數(shù)據(jù)庫(kù)配置Config,就可以輕松完成2021-08-08利用maven命令指定配置文件打包springboot項(xiàng)目
這篇文章主要介紹了利用maven命令指定配置文件打包springboot項(xiàng)目,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11SpringBoot YAML語(yǔ)法基礎(chǔ)詳細(xì)整理
YAML 是 “YAML Ain’t Markup Language”(YAML 不是一種標(biāo)記語(yǔ)言)的遞歸縮寫(xiě)。在開(kāi)發(fā)的這種語(yǔ)言時(shí),YAML 的意思其實(shí)是:“Yet Another Markup Language”(仍是一種標(biāo)記語(yǔ)言),本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10一天時(shí)間用Java寫(xiě)了個(gè)飛機(jī)大戰(zhàn)游戲,朋友直呼高手
前兩天我發(fā)現(xiàn)論壇有兩篇飛機(jī)大戰(zhàn)的文章異?;鸨?但都是python寫(xiě)的,竟然不是我大Java,說(shuō)實(shí)話作為老java選手,我心里是有那么一些失落的,今天特地整理了這篇文章,需要的朋友可以參考下2021-05-05springboot Controller直接返回String類(lèi)型帶來(lái)的亂碼問(wèn)題及解決
文章介紹了在Spring Boot中,當(dāng)Controller直接返回String類(lèi)型時(shí)可能出現(xiàn)的亂碼問(wèn)題,并提供了解決辦法,通過(guò)在`application.yaml`中設(shè)置請(qǐng)求和響應(yīng)的編碼格式,并在自定義配置類(lèi)中進(jìn)行配置,可以有效解決這一問(wèn)題2024-11-11