Chimm.Excel —— 設(shè)置模板,填入數(shù)據(jù),就這樣~
碼云 | GitHub
1. 項目簡介1.1 簡介
什么是 Chimm.Excel?該程序是一個用Java編寫的Excel生成工具,基于模板操作,簡單、快速、易用。
1.2 特點
數(shù)據(jù)組裝很不一樣
與網(wǎng)上的一些開源軟件不同的是,這個程序是由excel模板驅(qū)動的,需要在模板中填寫變量名,而不是在程序中添加注釋。
為什么不使用基于注釋的方法?
網(wǎng)上一些基于注解的excel導出,基本只能導出簡單的表格樣式。該程序使用excel模板,因此可以導出一些更復雜的表格樣式。
螞蟻4
Antlr(ANother Tool for Language Recognition)是一個強大的跨語言語法解析器,可用于讀取、處理、執(zhí)行或翻譯結(jié)構(gòu)化文本或二進制文件。它被廣泛用于構(gòu)建語言、工具和框架。Antlr 可以在語法上生成一個可以構(gòu)建和遍歷解析樹的解析器。由于程序是基于Antlr4開發(fā)的,所以在變量的定義上非常靈活。我們可以定義集合變量,甚至可以在公式中定義變量。一張表對應一個數(shù)據(jù)對象,開發(fā)者只需要查詢數(shù)據(jù),組裝數(shù)據(jù)即可。
如何生成excel模板?
模板生成非常簡單。我們在定義變量的時候翻譯表格模板,只需要使用$+括號括起來的形式翻譯表格模板,比如:${school.name}。
Chimm.Excel 函數(shù)介紹
根據(jù)模板中的變量,將值寫入支持公式操作表中添加/減少行合并單元格(支持批量合并)更改單元格邊框樣式(粗體、虛線等)支持設(shè)置超鏈接(v1.2.0)2. 功能展示
我提供了一個演示測試類。
模板具體位置:src/test/resources/demo.xlsx
測試類的具體位置:src/test/java/../demo/Demo.java
模板文件:
處理后的文件:
3. 項目結(jié)構(gòu)
.com.github.chimmhuang└── excel ├── ExcelHelper.java 整個程序的主入口 ├── exception 自定義異常 ├── parser Antlr4解析文件 └── tablemodel 表格相關(guān)的類
3.1 ExcelHelper-表處理對象
這個對象是整個 Chimm.Excel 程序的主入口。提供創(chuàng)建excel工作簿、獲取工作表頁面、填寫模板數(shù)據(jù)、導出二進制數(shù)據(jù)等功能。下面我將詳細介紹主要方法。
3.2 ExcelWorkbook-excel 對象
這個對象對應整個excel文件,包括sheet頁的所有table對象。現(xiàn)階段這個對象的實際使用場景并不是太多,所以提供的方法比較少
3.3 SheetTable-table 對象
該對象對應于工作表頁面上的表格。提供了一些操作表格樣式的方法
3.4 Row-Row 對象
這個對象對應的是excel的行,并提供了一些對該行進行操作的方法
3.5 Cell-cell 對象
該對象對應于excel的單元格。提供了一些cell操作的方法
4. 使用說明 4.1 配置模板
對于模板配置,使用美元符號和大括號來定義變量,例如:${demo.value}。
本項目中我用于功能demo的模板基本滿足大部分場景:src/test/resources/demo.xlsx
4.2 導入坐標
com.github.chimmhuang chimm.excel 1.4.1
4.3 功能介紹4.3.1 導入模板,導出結(jié)果表
4.3.2 設(shè)置公式
public void testFillInTable() throws Exception { /* 獲取文件的二進制 通過 ExcelHelper 獲取 excel 表格對象 ... */ // 獲取指定的 sheet 頁(該對象即是我們設(shè)置好的表格模板) SheetTable table = excelWorkbook.getSheet(0); // 給表格的 第13行 第A列 設(shè)置公式 Row row13 = table.getRow(13).getCell("A").setFormula("SUM(A1,A2,${demo.value})");}
4.3.3 加行/減行
public void testFillInTable() throws Exception { /* 獲取文件的二進制 通過 ExcelHelper 獲取 excel 表格對象 ... */ // 獲取指定的 sheet 頁(該對象即是我們設(shè)置好的表格模板) SheetTable table = excelWorkbook.getSheet(0); // 獲取第13行 Row row13 = table.getRow(13); // 將 rowNum 大于 13 的都刪除,進行動態(tài)表格添加 table.removeRowGE(13); // 復制行 Row copy1 = row13.copy(); Row copy2 = row13.copy(); // 設(shè)置新的值 copy1.getCell("A").setValue("copy1"); copy2.getCell("A").setValue("copy2"); // 設(shè)置完畢后,添加進表格 table.appendRow(copy1); table.appendRow(copy2);}
4.3.4 個合并單元格
public void testFillInTable() throws Exception { /* 獲取文件的二進制 通過 ExcelHelper 獲取 excel 表格對象 ... */ // 獲取指定的 sheet 頁(該對象即是我們設(shè)置好的表格模板) SheetTable table = excelWorkbook.getSheet(0); // 合并單元格,【此處僅展示功能,需要合并的 rowNum 建議動態(tài)計算】 table.mergeCell(13, 15, "A", "A"); table.mergeCell(16, 19, "A", "A");}
4.3.5 粗體單元格邊框
public void testFillInTable() throws Exception { /* 獲取文件的二進制 通過 ExcelHelper 獲取 excel 表格對象 ... */ // 獲取指定的 sheet 頁(該對象即是我們設(shè)置好的表格模板) SheetTable table = excelWorkbook.getSheet(0); // 設(shè)置指定行的單元格樣式,【此處僅展示功能:加粗,rowNum 建議動態(tài)計算】 table.getRow(19).setBorderStyle(BorderPositionEnum.BOTTOM, BorderStyle.MEDIUM);}
4.3.6 設(shè)置超鏈接
public void testFillInTable() throws Exception { /* 獲取文件的二進制 通過 ExcelHelper 獲取 excel 表格對象 ... */ // 獲取指定的 sheet 頁(該對象即是我們設(shè)置好的表格模板) SheetTable table = excelWorkbook.getSheet(0); // 設(shè)置超鏈接 table.getRow(2).getCell("A").setHyperlinkURL("");}
5. 參與投稿
非常歡迎您的加入!提出問題或提交拉取請求。
6. 聯(lián)系作者