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

Java使用JXLS導出Excel詳解

 更新時間:2024年11月27日 15:56:16   作者:星辰聊技術(shù)  
jxls是一個輕量級的Java庫,用于基于模板的Excel報表生成,這篇文章主要為大家介紹了Java如何使用JXLS導出Excel,感興趣的小伙伴可以跟隨小編一起學習一下

jxls是一個輕量級的Java庫,用于基于模板的Excel報表生成。

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

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

以下是jxls的一些主要特點:

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

添加jar

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

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

Context 現(xiàn)在包含創(chuàng)建報表所需的所有信息。但數(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中的一個主要概念,它本質(zhì)上代表了一個矩形區(qū)域,這個區(qū)域包含了需要進行數(shù)據(jù)轉(zhuǎn)換的單元格。每個Area可以包含一組轉(zhuǎn)換命令和一組嵌套的子區(qū)域,這些子區(qū)域也是Area,它們有自己的命令和子區(qū)域。

如下命令表示需要處理的區(qū)域為從A1至K列第4行:

jx:area(lastCell="K4")

創(chuàng)建報表

因為大版本的升級,我們不再使用如下方式:

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)是用的最多的標簽,用于循環(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ù)輸出報表查看結(jié)果。

1.multisheet 多sheet頁

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

輸出:

2.方向向右

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

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

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

3.索引

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

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

顯示:

4.過濾

只有選擇條件為 true 的項才會成為輸出的一部分。

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

5. 分組和分組排序

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

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

示例代碼:

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

示例圖:

判斷

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

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

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

動態(tài)行列

jx:grid 命令可用于生成具有標題區(qū)域和數(shù)據(jù)行區(qū)域的動態(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ù)組的表達式
  • imageType:  可以包含以下值:PNG(默認值)、JPEG(非 JPG)、EMF、WMFPICT、DIB
  • scaleX和scaleY: 縮放參數(shù)(可選)
  • lastCell: 區(qū)域結(jié)束

excel 公式**處理

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

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

相關(guān)文章

  • 關(guān)于Java并發(fā)編程中線程間協(xié)作的兩種方式

    關(guān)于Java并發(fā)編程中線程間協(xié)作的兩種方式

    這篇文章主要介紹了關(guān)于Java并發(fā)編程中線程間協(xié)作的兩種方式,當隊列滿時,生產(chǎn)者需要等待隊列有空間才能繼續(xù)往里面放入商品,而在等待的期間內(nèi),生產(chǎn)者必須釋放對臨界資源的占用權(quán),這是消費者模式,需要的朋友可以參考下
    2023-07-07
  • Java順時針打印矩陣

    Java順時針打印矩陣

    這篇文章主要為大家詳細介紹了Java順時針打印矩陣,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • Java通俗易懂系列設(shè)計模式之模板模式

    Java通俗易懂系列設(shè)計模式之模板模式

    這篇文章主要介紹了Java通俗易懂系列設(shè)計模式之模板模式,想了解設(shè)計模式的同學,可以仔細看一下
    2021-04-04
  • 超簡單的java獲取鼠標點擊位置坐標的實例(鼠標在Jframe上的坐標)

    超簡單的java獲取鼠標點擊位置坐標的實例(鼠標在Jframe上的坐標)

    在Java窗體Jframe上獲取鼠標點擊的坐標,其中使用了匿名內(nèi)部類,實例代碼非常簡單易懂,大家可以學習一下
    2018-03-03
  • SpringBoot整合MongoDB的完整操作指南

    SpringBoot整合MongoDB的完整操作指南

    在實際項目開發(fā)中,合理封裝MongoDB的操作工具類,可以大幅提升代碼復用性和維護性,本文將帶你從零開始實現(xiàn)一個功能完善的MongoDB工具類,涵蓋基礎(chǔ)CRUD和高級查詢功能,需要的朋友可以參考下
    2026-02-02
  • 使用Java進行Json數(shù)據(jù)的解析(對象數(shù)組的相互嵌套)

    使用Java進行Json數(shù)據(jù)的解析(對象數(shù)組的相互嵌套)

    下面小編就為大家?guī)硪黄褂肑ava進行Json數(shù)據(jù)的解析(對象數(shù)組的相互嵌套)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • SpringMVC使用@PathVariable接收參數(shù)過程解析

    SpringMVC使用@PathVariable接收參數(shù)過程解析

    這篇文章主要介紹了SpringMVC使用@PathVariable接收參數(shù)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • 詳解如何在SpringBoot中使用WebMvc

    詳解如何在SpringBoot中使用WebMvc

    Spring?Boot?是一個快速、簡單的開發(fā)框架,在?Spring?Boot?中,我們可以使用?WebMvc?來構(gòu)建?Web?應(yīng)用程序,所以本文就來講講如何在SpringBoot中使用WebMvc吧
    2023-06-06
  • springboot集成tkmapper及基本使用教程

    springboot集成tkmapper及基本使用教程

    tk.mybatis可以節(jié)省程序員的大部分時間,對于程序員來說關(guān)于一張表的操作無非就是增刪改查,tk.mybatis提供了一些基本操作的SQL語句,比如說按表的主鍵查詢、刪除等基本操作,我們接下來就來介紹一些springboot集成tkmapper及基本使用
    2022-11-11
  • springboot項目配置swagger2示例詳解

    springboot項目配置swagger2示例詳解

    Swagger是一款RESTful接口的文檔在線自動生成、功能測試功能框架。本文重點給大家介紹springboot項目配置swagger2示例代碼詳解,需要的朋友參考下吧
    2021-09-09

最新評論

桂平市| 梨树县| 贡山| 元氏县| 抚顺市| 理塘县| 夏邑县| 林甸县| 溧水县| 固安县| 巴楚县| 抚松县| 黄大仙区| 驻马店市| 丹巴县| 平阴县| 象山县| 洛浦县| 拉孜县| 龙岩市| 木里| 甘泉县| 皮山县| 固镇县| 石首市| 永城市| 临泉县| 大姚县| 年辖:市辖区| 隆化县| 汝州市| 青田县| 晋州市| 封丘县| 榆树市| 通许县| 焉耆| 峨眉山市| 洪洞县| 治多县| 庄河市|