成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java 導出 Excel 利器:JXLS

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

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

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

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

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

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

添加jar

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

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

Context 現在包含創建報表所需的所有信息。但數據以Map<String, Object> 的形式傳遞給 JxlsTemplateFiller

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

XlsArea 區域

Area是jXLS中的一個主要概念,它本質上代表了一個矩形區域,這個區域包含了需要進行數據轉換的單元格。每個Area可以包含一組轉換命令和一組嵌套的子區域,這些子區域也是Area,它們有自己的命令和子區域。

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

jx:area(lastCell="K4")

創建報表

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

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"));

循環

循環是用的最多的標簽,用于循環輸出各列數據:

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

示例:

publicclassEmployee{
    private String name;
    private Date birthDate;
    private BigDecimal payment;
    private BigDecimal bonus;
    // getters/setters ...
    publicEmployee(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;

將模版編輯為如下:

圖片圖片

根據輸出報表查看結果。

1.multisheet 多sheet頁
jx:each(items="employees" var="e" multisheet="sheetNames" lastCell="B4")

圖片圖片

輸出:

圖片圖片

2.方向向右

默認值為 directinotallow=“DOWN”,將創建行。將使用 directinotallow=“RIGHT” 創建列。

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

jx:each(items="e.departments" var="d" lastCell="D2" directinotallow="RIGHT")
3.索引

有時我們需要顯示循環的索引。使用屬性 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此時將在組內部進行排序。

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

示例代碼:

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

示例圖:

圖片圖片

圖片圖片

判斷

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

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

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

圖片圖片

圖片圖片

動態行列

jx:grid 命令可用于生成具有標題區域和數據行區域的動態網格。

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: 組合列數
  • rows: 合并的行數
  • minCols: 要合并的最小列數
  • minRows: 要合并的最小行數
  • lastCell: 合并單元格范圍。

圖片

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

jx:image(src="image" lastCell="A2")
  • src: 返回包含圖像數據的 byte[] 數組的表達式
  • imageType: 可以包含以下值:PNG(默認值)、JPEG(非 JPG)、EMFWMFPICTDIB
  • scaleX和scaleY: 縮放參數(可選)
  • lastCell: 區域結束

excel 公式處理

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

JXLS官網:https://jxls.sourceforge.net/

責任編輯:武曉燕 來源: 碼猿技術專欄
相關推薦

2021-03-11 08:24:48

Javapoi數據脫敏

2025-05-06 01:00:00

Excel高性能內存

2020-12-02 11:56:16

Java注解Excel

2023-02-25 10:04:21

JavaExcel導出功能

2020-09-22 09:41:09

前端

2025-05-12 00:00:00

2023-02-03 08:21:30

excelMySQL

2012-04-28 10:50:51

jQuery

2021-03-26 07:09:15

Java技術pdfExcel

2025-02-12 07:27:52

MySQL8分頁查詢excel

2024-09-12 17:23:02

2022-09-21 08:16:18

緩存框架

2025-06-16 07:07:03

Java數據Jackson

2022-12-29 08:49:40

SpringBootExcel

2009-12-04 16:49:38

PHP導出Excel亂

2009-06-16 14:09:00

Netbeans介紹

2015-08-21 09:56:17

Java內存分析MAT使用

2022-05-12 08:32:25

JavaArthas阿爾薩斯

2025-05-30 07:10:19

2024-05-07 08:08:24

隊列oss文件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲成人免费视频在线 | caoporn免费在线视频 | 欧美日韩中 | 亚洲不卡在线观看 | 国产欧美精品一区二区 | 中文字幕 在线观看 | 国产中文 | 亚洲一区网站 | 日本中出视频 | 精品亚洲一区二区三区四区五区高 | 日韩欧美在线视频 | 激情av免费看 | 国产精品福利视频 | 日本在线一区二区 | 久久免费资源 | 亚洲性人人天天夜夜摸 | 五月激情婷婷在线 | 久久久久久一区 | 国产精品免费一区二区 | 伊色综合久久之综合久久 | 免费在线观看成人av | 精品三区 | 欧美精品在线免费观看 | 亚洲高清一区二区三区 | 中文字幕久久久 | 精品一区二区三区入口 | 久久精品二区亚洲w码 | 伊人久久大香线 | 91青青草视频 | 日韩一区二区免费视频 | 成人久久18免费网站麻豆 | 国产精品免费观看视频 | 国产色片在线 | 成人一区二区三区 | 国产精品日日摸夜夜添夜夜av | 久久99精品久久久久婷婷 | 日本一区二区三区视频在线 | 免费一区 | 国产一区不卡 | 亚洲高清视频在线 | 国产免费国产 |