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

Java?EasyExcel創(chuàng)建復雜表格的完整指南

 更新時間:2025年12月08日 09:18:57   作者:codingPower  
WriteTable?是?EasyExcel?庫中的一個核心組件,用于在同一個?Excel?表單(Sheet)內(nèi)創(chuàng)建多個獨立的表格區(qū)域,下面我們來看看如何使用WriteTable創(chuàng)建復雜表格吧

1.EasyExcel WriteTable 核心概念解析

WriteTable 是 EasyExcel 庫中的一個核心組件,用于在同一個 Excel 表單(Sheet)內(nèi)創(chuàng)建多個獨立的表格區(qū)域。與 WriteSheet(代表整個表單)不同,WriteTable 允許您在同一個 Sheet 中構建多個結(jié)構化表格,每個表格有自己的表頭和數(shù)據(jù)區(qū)域。這種機制特別適用于需要生成復雜報表的場景,如企業(yè)數(shù)據(jù)匯總、財務分析等。

技術要點

  • 相對位置定位:WriteTable 通過設置 relativeHeadRowIndex 等參數(shù)來定義表格的起始位置,確保多個表格不會重疊。
  • 復雜表頭支持:支持多級表頭(如三級嵌套表頭),通過 @ExcelProperty 注解實現(xiàn)。
  • 樣式定制:允許自定義表格樣式,包括表頭背景色、字體、邊框等。
  • 大數(shù)據(jù)量處理:基于 EasyExcel 的流式寫入機制,能高效處理大量數(shù)據(jù),避免內(nèi)存溢出。

2.環(huán)境準備與基礎配置

2.1 Maven 依賴配置

在您的 Java 項目中,需添加 EasyExcel 和 Lombok 依賴。Lombok 用于簡化實體類定義(可選)。在 pom.xml 文件中添加以下內(nèi)容:

<dependencies>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>easyexcel</artifactId>
        <version>3.3.2</version>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.24</version>
        <optional>true</optional>
    </dependency>
</dependencies>

2.2 基礎實體類定義

定義數(shù)據(jù)模型實體類,用于表示表格數(shù)據(jù)。使用 @ExcelProperty 注解指定表頭名稱。

@Data
public class Person {
    @ExcelProperty("ID")
    private Integer id;
    
    @ExcelProperty("姓名")
    private String name;
    
    @ExcelProperty("年齡")
    private Integer age;
    
    @ExcelProperty("入職日期")
    private Date joinDate;
}

@Data
public class Department {
    @ExcelProperty("部門ID")
    private Integer deptId;
    
    @ExcelProperty("部門名稱")
    private String deptName;
    
    @ExcelProperty("預算(萬元)")
    private Double budget;
}

3.核心實現(xiàn):多表格創(chuàng)建

基礎多表格實現(xiàn)

在服務類中,使用 WriteTable 創(chuàng)建多個表格。關鍵步驟包括:

  • 創(chuàng)建 ExcelWriter:初始化寫入器。
  • 定義 WriteSheet:代表整個表單,可禁用默認表頭。
  • 定義 WriteTable:每個表格指定表頭類、位置和樣式。
  • 寫入數(shù)據(jù):為每個表格提供數(shù)據(jù)源。
ID姓名年齡入職日期
1power222024-10-12
2小明322021-02-21
部門id部門名稱預算(萬元)
b101財務部2000

示例代碼:

@Service
public class ComplexExcelService {
    
    public void writeComplexTable() {
    
        /*
         //1.寫入io流
        ByteArrayOutputStream outputStream =new ByteArrayOutputStream(1024);
        ExcelWriter excelWriter = EasyExcel.write(outputStream).build();
		*/
		//2。寫入文件
		String fileName = "企業(yè)數(shù)據(jù)報表_" + LocalDate.now().format(DateTimeFormatter.BASIC_ISO_DATE) + ".xlsx"; 
        try (ExcelWriter excelWriter = EasyExcel.write(fileName).build()) {
            // 創(chuàng)建 WriteSheet,禁用默認表頭
            //.registerWriteHandler(XXXHandler)  (XXXHandler需實現(xiàn) CellWriteHandler)
            WriteSheet writeSheet = EasyExcel.writerSheet("企業(yè)綜合數(shù)據(jù)")
                .needHead(Boolean.FALSE)
                .build();
            
            // 創(chuàng)建第一個表格:人員信息
            WriteTable personnelTable = EasyExcel.writerTable(0)
                .head(Person.class) // 使用類注解生成表頭
                .needHead(Boolean.TRUE)
                .build(); // 可添加 .tableStyle() 自定義樣式
            
            // 創(chuàng)建第二個表格:部門信息,定位在第一個表格下方
            WriteTable departmentTable = EasyExcel.writerTable(1)
                .head(Department.class)
                .needHead(Boolean.TRUE)
                .relativeHeadRowIndex(6) // 預留空間,避免重疊
                .build();
            
            // 寫入數(shù)據(jù)
            excelWriter.write(generatePersonData(), writeSheet, personnelTable);
            excelWriter.write(generateDepartmentData(), writeSheet, departmentTable);
            
            logger.info("復雜表格生成完成:{}", fileName);
        }
    }
    
    private List<Person> generatePersonData() {
        // 生成模擬數(shù)據(jù),略
    }
    
    private List<Department> generateDepartmentData() {
        // 生成模擬數(shù)據(jù),略
    }
}

關鍵參數(shù)解釋

  • relativeHeadRowIndex:指定表格表頭的起始行索引(從 0 開始),用于定位表格位置。
  • tableStyle:可選參數(shù),用于自定義表格樣式(需實現(xiàn) WriteHandler)。

4.高級特性:復雜表頭與樣式定制

4.1 多級表頭實現(xiàn)

EasyExcel 支持嵌套表頭,通過 @ExcelProperty 的數(shù)組參數(shù)定義多級結(jié)構。

@Data
@HeadRowHeight(25)
@ContentRowHeight(20)
public class ComplexHeaderData {
    
    @ExcelProperty(value = {"企業(yè)信息", "基本信息", "員工編號"})
    private String employeeId;
    
    @ExcelProperty(value = {"企業(yè)信息", "基本信息", "姓名"})
    private String name;
    
    @ExcelProperty(value = {"財務數(shù)據(jù)", "薪資信息", "基本工資"})
    private Double baseSalary;
    
    @ExcelProperty(value = {"財務數(shù)據(jù)", "薪資信息", "績效獎金"})
    private Double performanceBonus;
    
    @ExcelProperty(value = {"財務數(shù)據(jù)", "薪資信息", "年終獎"})
    private Double annualBonus;
}

WriteTable 中,使用此類作為表頭,即可自動生成三級表頭。

4.2 自定義樣式策略

通過實現(xiàn) WriteHandler 接口,可以定制表頭和數(shù)據(jù)行的樣式。

@Component
public class CustomExcelStyleStrategy implements WriteHandler {
    
    @Override
    public void afterCellCreate(WriteSheetHolder writeSheetHolder, 
                               WriteTableHolder writeTableHolder, Cell cell, Head head, 
                               Integer relativeRowIndex, Boolean isHead) {
        
        Workbook workbook = writeSheetHolder.getSheet().getWorkbook();
        CellStyle style = workbook.createCellStyle();
        
        if (isHead) {
            // 表頭樣式:藍色背景,白色文字
            style.setFillForegroundColor(IndexedColors.ROYAL_BLUE.getIndex());
            style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
            
            Font font = workbook.createFont();
            font.setColor(IndexedColors.WHITE.getIndex());
            font.setBold(true);
            style.setFont(font);
            
            // 邊框設置
            style.setBorderBottom(BorderStyle.THIN);
            style.setBorderLeft(BorderStyle.THIN);
            style.setBorderRight(BorderStyle.THIN);
            style.setBorderTop(BorderStyle.THIN);
        } else {
            // 數(shù)據(jù)行樣式:灰色邊框
            style.setBorderBottom(BorderStyle.THIN);
            style.setBorderLeft(BorderStyle.THIN);
            style.setBorderRight(BorderStyle.THIN);
            style.setBorderTop(BorderStyle.THIN);
        }
        
        cell.setCellStyle(style);
    }
}

WriteTable 構建時,添加此策略:

WriteTable personnelTable = EasyExcel.writerTable(0)
    .head(Person.class)
    .needHead(Boolean.TRUE)
    .registerWriteHandler(new CustomExcelStyleStrategy()) // 注冊自定義樣式
    .build();

5.總結(jié)

WriteTable 是 EasyExcel 中實現(xiàn)多表格報表的核心工具,通過相對位置定位和樣式定制,能高效生成復雜 Excel 文件。關鍵步驟包括:

  • 準備環(huán)境:添加依賴,定義實體類。
  • 構建表格:使用 WriteTable 定義多個獨立區(qū)域。
  • 高級定制:利用多級表頭和自定義樣式增強可讀性。

到此這篇關于Java EasyExcel創(chuàng)建復雜表格的完整指南的文章就介紹到這了,更多相關Java EasyExcel創(chuàng)建復雜表格內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 一文詳解Spring事務的實現(xiàn)與本質(zhì)

    一文詳解Spring事務的實現(xiàn)與本質(zhì)

    這篇文章主要介紹了Spring中事務的兩種實現(xiàn)方式:聲明式事務、編程式事務以及他們的本質(zhì)。文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-04-04
  • MyBatis中?@Mapper?和?@MapperScan?的區(qū)別與使用解析

    MyBatis中?@Mapper?和?@MapperScan?的區(qū)別與使用解析

    本文介紹了SpringBoot中MyBatis的兩個常用注解:@Mapper和@MapperScan,@Mapper用于標記單個Mapper接口,而@MapperScan用于批量掃描指定包下的所有Mapper接口,兩者都有各自適用的場景,選擇合適的注解可以提高開發(fā)效率并使代碼更加簡潔,感興趣的朋友一起看看吧
    2025-01-01
  • 利用Java寫一個學生管理系統(tǒng)

    利用Java寫一個學生管理系統(tǒng)

    今天這篇文章就給給大家分享利用Java寫一個學生管理系統(tǒng)吧,先寫一個簡單的用List來實現(xiàn)學生管理系統(tǒng):
    2021-09-09
  • SpringMVC+Mybatis二維碼實現(xiàn)多平臺付款(附源碼)

    SpringMVC+Mybatis二維碼實現(xiàn)多平臺付款(附源碼)

    本文主要實現(xiàn)微信支付寶等支付平臺合多為一的二維碼支付,并且實現(xiàn)有效時間內(nèi)支付有效,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • springBoot使用JdbcTemplate代碼實例

    springBoot使用JdbcTemplate代碼實例

    這篇文章主要介紹了springBoot使用JdbcTemplate代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • 如何利用SpringBoot搭建WebService服務接口

    如何利用SpringBoot搭建WebService服務接口

    之前項目經(jīng)理想要開發(fā)一個webservice的協(xié)議,給我一個星期的時間,后面用springboot開發(fā)了webservice,這篇文章主要給大家介紹了關于如何利用SpringBoot搭建WebService服務接口的相關資料,需要的朋友可以參考下
    2023-11-11
  • IDEA社區(qū)版創(chuàng)建spring boot項目的安裝插件的圖文教程

    IDEA社區(qū)版創(chuàng)建spring boot項目的安裝插件的圖文教程

    這篇文章主要介紹了IDEA社區(qū)版創(chuàng)建spring boot項目的安裝插件,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • maven項目打jar包并包含所有依賴詳細教程

    maven項目打jar包并包含所有依賴詳細教程

    maven打包生成的普通jar包,只包含該工程下源碼編譯結(jié)果,不包含依賴內(nèi)容,下面這篇文章主要給大家介紹了關于maven項目打jar包并包含所有依賴的相關資料,需要的朋友可以參考下
    2023-05-05
  • JVM之方法返回地址詳解

    JVM之方法返回地址詳解

    這篇文章主要介紹了JVM之方法返回地址詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java Synchronized的偏向鎖詳細分析

    Java Synchronized的偏向鎖詳細分析

    synchronized作為Java程序員最常用同步工具,很多人卻對它的用法和實現(xiàn)原理一知半解,以至于還有不少人認為synchronized是重量級鎖,性能較差,盡量少用。但不可否認的是synchronized依然是并發(fā)首選工具,本文就來詳細講講
    2023-04-04

最新評論

巴青县| 筠连县| 玉屏| 和林格尔县| 威远县| 吉水县| 唐海县| 汤阴县| 东乡族自治县| 土默特右旗| 姜堰市| 峡江县| 建水县| 铁力市| 临安市| 廉江市| 浏阳市| 宜都市| 汝南县| 上思县| 陆丰市| 中江县| 祁东县| 阳春市| 鄂伦春自治旗| 浦北县| 青阳县| 临湘市| 逊克县| 玛沁县| 汶上县| 清苑县| 广东省| 舟山市| 平罗县| 会同县| 翼城县| 驻马店市| 庆安县| 黔江区| 清涧县|