最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Springboot使用jxls實(shí)現(xiàn)excel模板導(dǎo)出excel方式

 更新時(shí)間:2024年08月15日 10:32:17   作者:專(zhuān)注寫(xiě)bug  
這篇文章主要介紹了Springboot使用jxls實(shí)現(xiàn)excel模板導(dǎo)出excel方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

jxls的正確使用,需要使用到下面的表達(dá)式。

# 設(shè)置 列表數(shù)據(jù)展示 
jx:each(items="item.itemsList" var="obj" lastCell="H11" varIndex="ojbIndex")
jx:if(condition="item.productType.equals('財(cái)務(wù)報(bào)表')&&ojbIndex==0" lastCell="H11" areas=["A11:H11"])

# 設(shè)置表title 范圍
jx:area(lastCell=”H12”)

但本次,并未使用到上面的要求,直接進(jìn)行指定xls模板數(shù)據(jù)填充與導(dǎo)出。

依賴(lài)引入

<!-- excel 填充 -->
<dependency>
    <groupId>org.jxls</groupId>
    <artifactId>jxls</artifactId>
    <version>2.8.1</version>
</dependency>
<dependency>
    <groupId>net.sf.jxls</groupId>
    <artifactId>jxls-core</artifactId>
    <version>1.0.6</version>
</dependency>
<dependency>
    <groupId>org.jxls</groupId>
    <artifactId>jxls-poi</artifactId>
    <version>2.8.1</version>
</dependency>

編寫(xiě)一個(gè)導(dǎo)出模板

如下所示:

放在springboot項(xiàng)目中的src\main\resources下的templates_report中,命名為test_user2.xls

編寫(xiě)工具類(lèi)

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.Map;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import net.sf.jxls.transformer.XLSTransformer;
 
public class ExcelUtil {

	/**
	 * 下載excel
	 *
	 * @param sourcePath 模板路徑
	 * @param beanParams excel內(nèi)容
	 * @return
	 */
	public static byte[] downLoadExcel(String sourcePath, Map<String, Object> beanParams) throws Exception {
		ByteArrayOutputStream os = new ByteArrayOutputStream();
		//讀取模板
		Resource resource = new ClassPathResource(sourcePath);
		InputStream is = resource.getInputStream();

		XLSTransformer transformer = new XLSTransformer();
		//向模板中寫(xiě)入內(nèi)容
		Workbook workbook = transformer.transformXLS(is, beanParams);
		//寫(xiě)入成功后轉(zhuǎn)化為輸出流
		workbook.write(os);

		byte[] bytes = os.toByteArray();
		return bytes;
	}
}

編寫(xiě)測(cè)試類(lèi)

@GetMapping("/report-xls")
public void excelReport(HttpServletResponse response) throws Exception {
    Map<String, Object> map = new HashMap();
    List<Map<String, Object>> dataList = Lists.newArrayList();
    for (int i = 0; i < 10; i++) {
        Map<String, Object> params = new HashMap<>();
        params.put("num","1_"+i);
        params.put("name","xj_"+i);
        params.put("age",22);
        params.put("mail","專(zhuān)注寫(xiě)bug測(cè)試中文");
        dataList.add(params);
    }
    // ${item.num}
    map.put("item",dataList);

    byte[] bytes = ExcelUtil.downLoadExcel("/templates_report/test_user2.xls", map);

    String fileName = UUID.randomUUID().toString() + "_001_test.xls";
    generateFile(response, bytes, fileName);
}

導(dǎo)出測(cè)試

http://localhost/report/report-xls

使用 jx 表達(dá)式填充(2023.08.08)

就如文章開(kāi)始的一樣,說(shuō)到了jx的表達(dá)式語(yǔ)法,3種樣式:

# 設(shè)置 列表數(shù)據(jù)展示 
jx:each(items="item.itemsList" var="obj" lastCell="H11" varIndex="ojbIndex")
jx:if(condition="item.productType.equals('財(cái)務(wù)報(bào)表')&&ojbIndex==0" lastCell="H11" areas=["A11:H11"])

# 設(shè)置表title 范圍
jx:area(lastCell=”H12”)

這里分幾種使用情況,做一個(gè)大致的說(shuō)明:

簡(jiǎn)單報(bào)表

如下圖所示,需要導(dǎo)出一個(gè)簡(jiǎn)單的報(bào)表數(shù)據(jù)信息。何為簡(jiǎn)單?

就是普通的表格

注意圖中標(biāo)明的兩個(gè)方框。其中分別寫(xiě)了如下的批注。

  • 表格頭部
	Administrator:
	jx:area(lastCell=”P(pán)2”)

這里必須設(shè)置范圍,也就是lastCell。表示:表頭最多寬度只到P2。

  • 表格內(nèi)容(列表數(shù)據(jù))
Administrator:
jx:each(items="dataList" var="item" lastCell="P2")

這里也有范圍,設(shè)置的是lastCellP2。

【注意】lastCell 設(shè)置的是橫向最大延伸到P2。

列表多條數(shù)據(jù),只看第一行即可!

復(fù)雜的單行數(shù)據(jù)填充

如下面的excel導(dǎo)出模板。

除了前2行左上部分是集合列表,其他都只需要顯示一條對(duì)應(yīng)的數(shù)據(jù)即可!

其實(shí)并不需要用到列表集合,全部是單條數(shù)據(jù)。只是需要顯示很多行而已。

像這樣的數(shù)據(jù),如何實(shí)現(xiàn)呢?

依舊還是使用jx表達(dá)式,限制導(dǎo)出文本的范圍。

如下:

表頭部分:

Administrator:
jx:area(lastCell=”M20”)  

這里的范圍,其實(shí)只需要大于等于需要導(dǎo)出的excel的范圍就行。

如果小了,則只顯示部分?jǐn)?shù)據(jù)。

數(shù)據(jù)部分,jx表達(dá)式如下所示:

Administrator:
jx:each(items="dataList" var="item" lastCell="M20")

這里的lastCell是寫(xiě)的M20,也就是

從標(biāo)注添加處開(kāi)始算起,直至 M列的第20行,都算一個(gè)集合的一列數(shù)據(jù)!

也就是從A2~M20這個(gè)構(gòu)成的長(zhǎng)方形,包括的范圍,都只當(dāng)做一個(gè)集合中的一個(gè)對(duì)象。

List<User>中第一個(gè) user 對(duì)象

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java基礎(chǔ)之接口組成更新的實(shí)現(xiàn)

    java基礎(chǔ)之接口組成更新的實(shí)現(xiàn)

    本文主要介紹了java基礎(chǔ)之接口組成更新的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 使用Netty搭建服務(wù)端和客戶端過(guò)程詳解

    使用Netty搭建服務(wù)端和客戶端過(guò)程詳解

    這篇文章主要介紹了使用Netty搭建服務(wù)端和客戶端過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Hibernate框架數(shù)據(jù)分頁(yè)技術(shù)實(shí)例分析

    Hibernate框架數(shù)據(jù)分頁(yè)技術(shù)實(shí)例分析

    這篇文章主要介紹了Hibernate框架數(shù)據(jù)分頁(yè)技術(shù),結(jié)合實(shí)例形式分析了Hibernate框架實(shí)現(xiàn)數(shù)據(jù)分頁(yè)的原理,步驟與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-03-03
  • Java中object類(lèi)常用方法及應(yīng)用場(chǎng)景詳解

    Java中object類(lèi)常用方法及應(yīng)用場(chǎng)景詳解

    這篇文章主要介紹了Java中object類(lèi)常用方法及應(yīng)用場(chǎng)景的相關(guān)資料,正確重寫(xiě)這些方法是面向?qū)ο笤O(shè)計(jì)的基本要求,有助于避免踩坑并提高代碼質(zhì)量,需要的朋友可以參考下
    2025-04-04
  • Mybatis處理List參數(shù)過(guò)程

    Mybatis處理List參數(shù)過(guò)程

    本文詳細(xì)介紹了Mybatis處理List參數(shù)的方法,通過(guò)實(shí)體類(lèi)StudentInfo示例,展示了兩種不同類(lèi)型的List傳參查詢(xún),涵蓋從前期準(zhǔn)備SQL到Mapper接口及XML配置的全過(guò)程
    2026-05-05
  • SpringBoot+輕量級(jí)分布式日志框架GrayLog實(shí)踐

    SpringBoot+輕量級(jí)分布式日志框架GrayLog實(shí)踐

    將SpringBoot日志遷移至GrayLog的實(shí)戰(zhàn)經(jīng)驗(yàn),稱(chēng)其配置簡(jiǎn)單、輕量高效,支持多環(huán)境分布式,通過(guò)GELF格式實(shí)現(xiàn)快速日志追蹤與報(bào)警,尤其強(qiáng)調(diào)traceId在跨服務(wù)定位中的關(guān)鍵作用,降低維護(hù)成本并提升故障排查效率
    2025-08-08
  • 聊聊如何在springboot中添加模版

    聊聊如何在springboot中添加模版

    本文,我們談?wù)勅绾卧?nbsp;spring boot 中添加模版,因?yàn)橛袝r(shí)候我們也是需要后端渲染的嘛,比如公司官網(wǎng),文中有詳細(xì)的代碼示例供我們參考,需要的朋友可以參考下
    2023-08-08
  • SpringBoot整合websocket實(shí)現(xiàn)即時(shí)通信聊天

    SpringBoot整合websocket實(shí)現(xiàn)即時(shí)通信聊天

    這篇文章主要介紹了SpringBoot整合websocket實(shí)現(xiàn)即時(shí)通信聊天,實(shí)時(shí)通信是一個(gè)實(shí)時(shí)通信系統(tǒng),允許兩人或多人使用網(wǎng)絡(luò)實(shí)時(shí)的傳遞文字消息、文件、語(yǔ)音與視頻交流,需要的朋友可以參考下
    2022-05-05
  • SpringBoot內(nèi)置服務(wù)器(Tomcat/Jetty/Undertow)切換的操作指南

    SpringBoot內(nèi)置服務(wù)器(Tomcat/Jetty/Undertow)切換的操作指南

    本文介紹了如何在SpringBoot中切換內(nèi)置服務(wù)器(Tomcat、Jetty和Undertow),分析了它們的核心差異和適用場(chǎng)景,通過(guò)修改pom.xml和application.yml文件,可以實(shí)現(xiàn)服務(wù)器的切換和自定義配置,最后給出了選型建議和注意事項(xiàng),需要的朋友可以參考下
    2026-03-03
  • SpringBoot實(shí)現(xiàn)驗(yàn)證碼的案例分享

    SpringBoot實(shí)現(xiàn)驗(yàn)證碼的案例分享

    驗(yàn)證碼可以有效防止其他人對(duì)某一個(gè)特定的注冊(cè)用戶用特定的程序,破解方式進(jìn)行不斷的登錄嘗試,我們其實(shí)很經(jīng)??吹?登錄一些網(wǎng)站其實(shí)是需要驗(yàn)證碼的,所以本文給大家分享了SpringBoot實(shí)現(xiàn)驗(yàn)證碼的案例,需要的朋友可以參考下
    2024-11-11

最新評(píng)論

新河县| 萨嘎县| 池州市| 浪卡子县| 宁蒗| 鄂托克旗| 土默特左旗| 延长县| 华阴市| 宿松县| 奉新县| 始兴县| 射阳县| 灵璧县| 玉门市| 永善县| 剑阁县| 潜江市| 建瓯市| 长子县| 布尔津县| 广南县| 汝南县| 扬中市| 大同县| 石屏县| 蓬莱市| 巢湖市| 建湖县| 华容县| 开化县| 汤原县| 饶阳县| 大丰市| 平陆县| 莱芜市| 中宁县| 喀喇沁旗| 邹平县| 颍上县| 南昌县|