欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java使用JXLS實(shí)現(xiàn)導(dǎo)出Excel

 更新時(shí)間:2025年01月24日 09:24:23   作者:一名技術(shù)極客  
jxls作為一個(gè)開源工具,提供了一種高效且易于維護(hù)的方式來處理復(fù)雜的Excel導(dǎo)出需求,下面就跟隨小編一起來學(xué)習(xí)一下如何使用jxls實(shí)現(xiàn)導(dǎo)出Excel吧

jxls是一個(gè)輕量級(jí)的Java庫,用于基于模板的Excel報(bào)表生成。

jxls作為一個(gè)開源工具,提供了一種高效且易于維護(hù)的方式來處理復(fù)雜的Excel導(dǎo)出需求。它允許用戶通過在Excel模板中放置特定的標(biāo)記或注釋來定義數(shù)據(jù)的輸出格式和布局,從而避免了編寫大量重復(fù)且易出錯(cuò)的代碼。

標(biāo)注:簡(jiǎn)單的excel格式,用簡(jiǎn)單的poi,easyExcel等工具都能導(dǎo)出。但是針對(duì)復(fù)雜的excel,有固定的樣式、合并單元格、動(dòng)態(tài)列等各類要求,導(dǎo)致excel 導(dǎo)出需要花很大一部分精力去寫代碼。jxls在很大程度上解決了以上問題。

以下是jxls的一些主要特點(diǎn):

  • 簡(jiǎn)單性: jxls的設(shè)計(jì)哲學(xué)是簡(jiǎn)單和直觀,使得即使是初學(xué)者也能快速上手并使用它來創(chuàng)建復(fù)雜的Excel報(bào)表。
  • 靈活性: 通過在Excel模板中使用類似jsp的標(biāo)簽,jXls提供了極高的靈活性,可以輕松地生成各種格式的報(bào)表。
  • 輕量級(jí): 與其他Java Excel庫相比,jxls更加輕量,不會(huì)給項(xiàng)目增加太多的負(fù)擔(dān)。
  • 功能強(qiáng)大: jxls特別適合于處理包含固定樣式、合并單元格和動(dòng)態(tài)列等復(fù)雜要求的Excel導(dǎo)出任務(wù)。
  • 易于維護(hù): 使用jxls可以減少因手動(dòng)編碼導(dǎo)致的維護(hù)成本和出錯(cuò)概率,提高項(xiàng)目的可維護(hù)性。

添加jar

很高興在編寫文章時(shí)發(fā)現(xiàn)jxls的大版本升級(jí)了,所使用的jdk版本也來到了17。

于原先的jxls2.x版本的使用者來說,新的構(gòu)建器 API 取代了 JxlsHelper。TransformerFactory 和 createTransformer() 方法也已被刪除。

Context 現(xiàn)在包含創(chuàng)建報(bào)表所需的所有信息。但數(shù)據(jù)以Map<String, Object> 的形式傳遞給 JxlsTemplateFiller。

<dependency>
    <groupId>org.jxls</groupId>
    <artifactId>jxls-poi</artifactId>
    <version>3.0.0</version>
</dependency>

XlsArea 區(qū)域

Area是jXLS中的一個(gè)主要概念,它本質(zhì)上代表了一個(gè)矩形區(qū)域,這個(gè)區(qū)域包含了需要進(jìn)行數(shù)據(jù)轉(zhuǎn)換的單元格。每個(gè)Area可以包含一組轉(zhuǎn)換命令和一組嵌套的子區(qū)域,這些子區(qū)域也是Area,它們有自己的命令和子區(qū)域。

如下命令表示需要處理的區(qū)域?yàn)閺腁1至K列第4行:

jx:area(lastCell="K4")

創(chuàng)建報(bào)表

因?yàn)榇蟀姹镜纳?jí),我們不再使用如下方式:

Context context = new Context();
context.putVar("list", list);
JxlsHelper.getInstance().setEvaluateFormulas(evaluateFormulas).processTemplate(inputStream, outPutStream, context);

而是:

Map<String, Object> data = new HashMap<>();
data.put("employees", employees);
JxlsPoiTemplateFillerBuilder.newInstance()
        .withTemplate("template.xlsx")
        .build()
        .fill(data, new File("report.xlsx"));

循環(huán)

循環(huán)是用的最多的標(biāo)簽,用于循環(huán)輸出各列數(shù)據(jù):

jx:each(items="weeks" var="week"  lastCell="B4")

示例:

public class Employee {
    private String name;
    private Date birthDate;
    private BigDecimal payment;
    private BigDecimal bonus;
    // getters/setters ...
    public Employee(String name, Date birthDate, double payment, double bonus) {
        this(name, birthDate, new BigDecimal(payment), new BigDecimal(bonus));
    }
     public String getSalaryGroup() {
        return payment.doubleValue() > 2000d ? "high" : "normal";
    }
}

 List<Employee> employees = new ArrayList<>();
 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MMM-dd", Locale.US);
 employees.add(new Employee("Elsa", dateFormat.parse("1970-Jul-10"), 1500, 0.15));
 employees.add(new Employee("Oleg", dateFormat.parse("1973-Apr-30"), 2300, 0.25));
 employees.add(new Employee("John", dateFormat.parse("1970-Jul-10"), 3500, 0.10));
 employees.add(new Employee("Neil", dateFormat.parse("1975-Oct-05"), 2500, 0.00));
 employees.add(new Employee("Maria", dateFormat.parse("1978-Jan-07"), 1700, 0.15));
 employees.add(new Employee("John", dateFormat.parse("1969-May-30"), 2800, 0.20));
 employees.add(new Employee("Oleg", dateFormat.parse("1988-Apr-30"), 1500, 0.15));
 employees.add(new Employee("Maria", dateFormat.parse("1970-Jul-10"), 3000, 0.10));
 employees.add(new Employee("John", dateFormat.parse("1973-Apr-30"), 1000, 0.05));
 return employees;

將模版編輯為如下:

根據(jù)輸出報(bào)表查看結(jié)果。

unsetunset1.multisheet 多sheet頁unsetunset

jx:each(items="employees" var="e" multisheet="sheetNames" lastCell="B4")

輸出:

unsetunset2.方向向右unsetunset

默認(rèn)值為 direction=“DOWN”,將創(chuàng)建行。將使用 direction=“RIGHT” 創(chuàng)建列。

您也可以為特殊情況設(shè)置自己的 cellRefGenerator,但在此不再進(jìn)一步描述。

jx:each(items="e.departments" var="d" lastCell="D2" direction="RIGHT")

unsetunset3.索引unsetunset

有時(shí)我們需要顯示循環(huán)的索引。使用屬性 varIndex 指定將保存從 0 開始的迭代索引的變量名稱。

jx:each(items="employees" var="e" varIndex="index" lastCell="C2")

顯示:

unsetunset4.過濾unsetunset

只有選擇條件為 true 的項(xiàng)才會(huì)成為輸出的一部分。

jx:each(items="employees" var="e" select="e.payment > 2000" lastCell="C2")

unsetunset5. 分組和分組排序unsetunset

在屬性中指定 var name + “.” + 屬性名稱以對(duì)項(xiàng)目進(jìn)行分組。還必須在屬性中指定 ASC、DESC此時(shí)將在組內(nèi)部進(jìn)行排序。

比如employee類中有salaryGroup(工資)方法來指定該人是否大于2000元。

示例代碼:

jx:each(items="employees" var="g" groupBy="g.salaryGroup" groupOrder="ASC" lastCell="C3")

示例圖:

判斷

jx:if 命令根據(jù)條件表達(dá)式顯示/隱藏單元格。這就像 Java 中的 if 或 if,else。

jx:if(condition="e.payment<2000" lastCell="C2" areas=["A2:C2","A3:C3"])

condition:如果表達(dá)式結(jié)果為真,則顯示區(qū)域,否則隱藏區(qū)域; 如果表達(dá)式結(jié)果不為 true,則顯示其他區(qū)域,否則隱藏其他區(qū)域。

動(dòng)態(tài)行列

jx:grid 命令可用于生成具有標(biāo)題區(qū)域和數(shù)據(jù)行區(qū)域的動(dòng)態(tài)網(wǎng)格。

jx:grid(headers="headers" data="items" areas=["A3:A3","A4:A4"] formatCells="BigDecimal:C1,Date:D1" lastCell="A4")

在這里插入圖片描述

合并單元格

jx:mergeCells(cols="" rows="" minCols="" minRows="" lastCell="C2")

cols: 組合列數(shù)

rows: 合并的行數(shù)

minCols: 要合并的最小列數(shù)

minRows: 要合并的最小行數(shù)

lastCell: 合并單元格范圍。

圖片

使用此命令將圖像添加到工作表中。

jx:image(src="image" lastCell="A2")

src: 返回包含圖像數(shù)據(jù)的 byte[] 數(shù)組的表達(dá)式

imageType: 可以包含以下值:PNG(默認(rèn)值)、JPEG(非 JPG)、EMF、WMF、PICT、DIB。

scaleX和scaleY: 縮放參數(shù)(可選)

lastCell: 區(qū)域結(jié)束

excel 公式處理

參數(shù)化公式允許在公式中使用變量,必須將其括在$[ ] 符號(hào)中,比如我們需要把數(shù)據(jù)輸出的同時(shí)進(jìn)行計(jì)算,比如我們數(shù)據(jù)中的比率值是1(excel上最終需要顯示為1%)。我們可以修改代碼為$[${item.taxRate}/100],其中${item.taxRate}表示我們自己的迭代變量,同時(shí)改變單元格樣式為百分比,此時(shí)輸出的值才會(huì)是1%

JXLS官網(wǎng):https://jxls.sourceforge.net/

到此這篇關(guān)于Java使用JXLS實(shí)現(xiàn)導(dǎo)出Excel的文章就介紹到這了,更多相關(guān)Java JXLS導(dǎo)出Excel內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java 類在 Tomcat 中是如何加載的(過程分析)

    Java 類在 Tomcat 中是如何加載的(過程分析)

    這篇文章主要介紹了Java 類在 Tomcat 中是如何加載的過程分析,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • java設(shè)計(jì)模式之組合模式(Composite)

    java設(shè)計(jì)模式之組合模式(Composite)

    這篇文章主要為大家詳細(xì)介紹了java設(shè)計(jì)模式之組合模式Composite,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • Java中synchronized用法匯總

    Java中synchronized用法匯總

    使用 synchronized 無需手動(dòng)執(zhí)行加鎖和釋放鎖的操作,我們只需要聲明 synchronized 關(guān)鍵字就可以了,JVM 層面會(huì)幫我們自動(dòng)的進(jìn)行加鎖和釋放鎖的操作,我們今天重點(diǎn)來看一下synchronized 的幾種用法
    2022-04-04
  • FP-Growth算法的Java實(shí)現(xiàn)+具體實(shí)現(xiàn)思路+代碼

    FP-Growth算法的Java實(shí)現(xiàn)+具體實(shí)現(xiàn)思路+代碼

    FP-Growth算法比Apriori算法快很多(但是卻比不上時(shí)間,how time slipped away)。在網(wǎng)上搜索后發(fā)現(xiàn)Java實(shí)現(xiàn)的FP-Growth算法很少,且大多數(shù)不太能理解):太菜。所以就自己實(shí)現(xiàn)了一下。這篇文章重點(diǎn)介紹一下我的Java實(shí)現(xiàn)
    2021-06-06
  • Restful傳遞數(shù)組參數(shù)及注解大全

    Restful傳遞數(shù)組參數(shù)及注解大全

    這篇文章主要介紹了Restful傳遞數(shù)組參數(shù)及注解大全的相關(guān)資料,需要的朋友可以參考下
    2015-12-12
  • 使用Spring Initializr創(chuàng)建Spring Boot項(xiàng)目沒有JDK1.8的解決辦法

    使用Spring Initializr創(chuàng)建Spring Boot項(xiàng)目沒有JDK1.8的解決辦法

    很久沒創(chuàng)建springboot項(xiàng)目,今天使用idea的Spring Initializr 創(chuàng)建 Spring Boot項(xiàng)目時(shí),發(fā)現(xiàn)java版本里,無法選擇jdk1.8,只有17、21、22,所以本文介紹了使用Spring Initializr創(chuàng)建Spring Boot項(xiàng)目沒有JDK1.8的解決辦法,需要的朋友可以參考下
    2024-06-06
  • springsecurity記住我登錄時(shí)訪問無權(quán)限接口跳轉(zhuǎn)登錄界面的處理方案

    springsecurity記住我登錄時(shí)訪問無權(quán)限接口跳轉(zhuǎn)登錄界面的處理方案

    這篇文章主要介紹了springsecurity記住我登錄時(shí)訪問無權(quán)限接口跳轉(zhuǎn)登錄界面的處理方案,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-02-02
  • springboot項(xiàng)目配置context path失效的問題解決

    springboot項(xiàng)目配置context path失效的問題解決

    本文主要介紹了springboot項(xiàng)目配置context path失效的問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Arrays.asList方法總結(jié)

    Arrays.asList方法總結(jié)

    本文主要對(duì)Arrays.asList方法進(jìn)行總結(jié)。具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-02-02
  • SpringBoot3實(shí)戰(zhàn)教程之實(shí)現(xiàn)接口簽名驗(yàn)證功能

    SpringBoot3實(shí)戰(zhàn)教程之實(shí)現(xiàn)接口簽名驗(yàn)證功能

    接口簽名是一種重要的安全機(jī)制,用于確保 API 請(qǐng)求的真實(shí)性、數(shù)據(jù)的完整性以及防止重放攻擊,這篇文章主要介紹了SpringBoot3實(shí)戰(zhàn)教程之實(shí)現(xiàn)接口簽名驗(yàn)證功能,需要的朋友可以參考下
    2025-04-04

最新評(píng)論