一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Java 導出 Excel 利器:JXLS

 ZhouAndrew 2024-12-04
圖片
jxls是一個輕量級的Java庫,用于基于模板的Excel報表生成。
jxls作為一個開源工具,提供了一種高效且易于維護的方式來處理復雜的Excel導出需求。它允許用戶通過在Excel模板中放置特定的標記或注釋來定義數(shù)據(jù)的輸出格式和布局,從而避免了編寫大量重復且易出錯的代碼。
標注:簡單的excel格式,用簡單的poi,easyExcel等工具都能導出。但是針對復雜的excel,有固定的樣式、合并單元格、動態(tài)列等各類要求,導致excel 導出需要花很大一部分精力去寫代碼。jxls在很大程度上解決了以上問題。
以下是jxls的一些主要特點:
  • 簡單性: jxls的設計哲學是簡單和直觀,使得即使是初學者也能快速上手并使用它來創(chuàng)建復雜的Excel報表。

  • 靈活性: 通過在Excel模板中使用類似jsp的標簽,jXls提供了極高的靈活性,可以輕松地生成各種格式的報表。

  • 輕量級: 與其他Java Excel庫相比,jxls更加輕量,不會給項目增加太多的負擔。

  • 功能強大: jxls特別適合于處理包含固定樣式、合并單元格和動態(tài)列等復雜要求的Excel導出任務。

  • 易于維護: 使用jxls可以減少因手動編碼導致的維護成本和出錯概率,提高項目的可維護性。

添加jar

很高興在編寫文章時發(fā)現(xiàn)jxls的大版本升級了,所使用的jdk版本也來到了17。
對于原先的jxls2.x版本的使用者來說,新的構建器 API 取代了 JxlsHelperTransformerFactory 和 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中的一個主要概念,它本質上代表了一個矩形區(qū)域,這個區(qū)域包含了需要進行數(shù)據(jù)轉換的單元格。每個Area可以包含一組轉換命令和一組嵌套的子區(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'), 15000.15));
 employees.add(new Employee('Oleg', dateFormat.parse('1973-Apr-30'), 23000.25));
 employees.add(new Employee('John', dateFormat.parse('1970-Jul-10'), 35000.10));
 employees.add(new Employee('Neil', dateFormat.parse('1975-Oct-05'), 25000.00));
 employees.add(new Employee('Maria', dateFormat.parse('1978-Jan-07'), 17000.15));
 employees.add(new Employee('John', dateFormat.parse('1969-May-30'), 28000.20));
 employees.add(new Employee('Oleg', dateFormat.parse('1988-Apr-30'), 15000.15));
 employees.add(new Employee('Maria', dateFormat.parse('1970-Jul-10'), 30000.10));
 employees.add(new Employee('John', dateFormat.parse('1973-Apr-30'), 10000.05));
 return employees;
將模版編輯為如下:
圖片
根據(jù)輸出報表查看結果。
1.multisheet 多sheet頁
jx:each(items='employees' var='e' multisheet='sheetNames' lastCell='B4')
圖片
輸出:
圖片
2.方向向右
默認值為 direction=“DOWN”,將創(chuàng)建行。將使用 direction=“RIGHT” 創(chuàng)建列。
您也可以為特殊情況設置自己的 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此時將在組內部進行排序。
比如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:如果表達式結果為真,則顯示區(qū)域,否則隱西藏域; 如果表達式結果不為 true,則顯示其他區(qū)域,否則隱藏其他區(qū)域。
圖片
圖片

動態(tài)行列

jx:grid 命令可用于生成具有標題區(qū)域和數(shù)據(jù)行區(qū)域的動態(tài)網格。
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)、EMFWMF、PICT、DIB

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

  • lastCell: 區(qū)域結束

excel 公式處理

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

作者:jpq+

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    欧美日韩精品久久第一页| 日韩中文高清在线专区| 午夜福利大片亚洲一区| 久久黄片免费播放大全 | 欧美一级特黄特色大色大片| 久久精品国产在热久久| 午夜精品麻豆视频91| 亚洲少妇人妻一区二区| 一区二区欧美另类稀缺| 国产老女人性生活视频| 国产av精品一区二区| 精品国产91亚洲一区二区三区| 亚洲国产精品国自产拍社区| 黄色片一区二区三区高清| 亚洲国产综合久久天堂| 亚洲一区二区欧美激情| 久久亚洲精品成人国产| 99福利一区二区视频| 久久精品亚洲精品国产欧美| 大香蕉精品视频一区二区| 福利视频一区二区三区| 精品人妻一区二区三区四区久久 | 国产精品日韩欧美第一页| 欧美日韩免费观看视频| 久久综合九色综合欧美| 91人妻人人揉人人澡人| 欧美一区二区三区性视频| 夜色福利久久精品福利| 亚洲丁香婷婷久久一区| 青青操视频在线观看国产| 国产精品流白浆无遮挡| 国产精品日韩欧美一区二区| 欧美日韩免费黄片观看| 久久99夜色精品噜噜亚洲av| 免费福利午夜在线观看| 五月天六月激情联盟网| 日本精品中文字幕人妻| 国产欧美日韩精品一区二| 色丁香一区二区黑人巨大| 亚洲中文在线观看小视频| 麻豆国产精品一区二区|