EasyExcel讀取Excel詳解

一、從EasyExcel讀取Excel數據

EasyExcel是一個基於Java語言的開源的Excel讀寫工具。它提供了簡單的API來操作Excel文件,而且相比於Apache POI等其他同類工具,EasyExcel的速度更快,功能更齊全。下面我們將從從EasyExcel讀取Excel數據這個方面,來詳細講解。

首先,我們需要引入EasyExcel的依賴:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>2.2.10</version>  
</dependency>

接下來,我們就可以使用EasyExcel來讀取Excel數據了。下面是一個簡單的示例:

// 創建一個Excel讀取器
ExcelReader excelReader = EasyExcel.read("demo.xlsx", DemoData.class, new DemoDataListener()).build();
// 讀取數據
excelReader.read();
// 關閉讀取器
excelReader.finish();

在上面的示例中,我們使用了EasyExcel提供的ExcelReader來讀取Excel文件,並且傳入了Excel文件路徑、數據對象的類型和數據監聽器。在這裡,DemoDataListener是數據監聽器,它實現了EasyExcel提供的AnalysisEventListener接口,用於解析Excel數據。

二、跳過Excel表頭讀取數據

在實際的應用中,我們通常需要從Excel文件中獲取數據,並且需要跳過表頭。EasyExcel提供了skipHeadRows()方法來實現這個功能。下面是一個示例:

ExcelReader excelReader = EasyExcel.read("demo.xlsx", DemoData.class, new DemoDataListener()).sheet().headRowNumber(1).doRead();

在這個示例中,我們使用了sheet()方法來獲取Excel表格,然後使用headRowNumber()方法指定表頭所在行的索引是1,最後使用doRead()方法來讀取數據,並且跳過了表頭。

三、從Excel模板讀取數據並寫入

除了從Excel文件中讀取數據,EasyExcel還可以從Excel模板中讀取數據,並且將數據寫入到Excel文件中。下面是一個示例:

// 定義模板對象
ExcelTemplate excelTemplate = ExcelTemplateFactory.fromClasspath("template.xlsx").defaultSheet();
// 導出數據到Excel文件
excelTemplate.writer()
        .put("title", "XXX公司員工信息表")
        .put("companyName", "XXX公司")
        .put("date", new Date())
        .fill().finish();

在這個示例中,我們使用了ExcelTemplate來讀取指定路徑下的Excel模板文件,然後使用put()方法將數據寫入到Excel模板中,並且使用fill()方法將數據寫入到Excel文件中。

四、讀取Excel內容

在讀取Excel數據時,我們通常會遇到兩種類型的數據:字符串和數字。EasyExcel提供了Formatter實現類,可以將讀取到的字符串和數字格式化為Java對象。下面是一個示例:

@Data
public class DemoData {
    @ExcelProperty(value = "字符串標題", index = 0)
    private String string;
    @ExcelProperty(value = "數字標題", index = 1)
    private Double doubleData;
}

public class DemoDataListener extends AnalysisEventListener<DemoData> {
    @Override
    public void invoke(DemoData demoData, AnalysisContext analysisContext) {
        System.out.println(demoData);
    }
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {}
}

ExcelReader excelReader = EasyExcel.read("demo.xlsx", DemoData.class, new DemoDataListener()).build();
excelReader.read();
excelReader.finish();

在這個示例中,我們定義了DemoData數據類,並且使用@ExcelProperty註解指定Excel數據的列名和列索引。然後在DemoDataListener監聽器中重寫invoke()方法,用來讀取Excel數據並轉換為Java對象。最後,在ExcelReader中讀取數據並使用DemoDataListener監聽器進行解析。

五、讀取Excel數據為空處理

在讀取Excel文件時,我們可能會遇到Excel表格中數據為空的情況,這時我們需要對空數據進行處理。EasyExcel提供了數據轉換接口來實現這個功能。下面是一個示例:

public class DemoDataListner extends AnalysisEventListener {
    @Override
    public void invoke(Object obj, AnalysisContext context) {
        if (obj instanceof List) {
            List list = (List)obj;
            if (CollectionUtils.isEmpty(list)) {
                // Do something
            }
        }
    }
}

在這個示例中,我們在DemoDataListener數據監聽器中重寫了invoke()方法,在讀取數據之前先校驗數據是否為空。如果數據為空,我們就可以在這裡進行相應的處理。

六、讀取複雜Excel

在實際的應用中,Excel文件中可能會存在很多複雜的情況,比如單元格合併、多行標題、嵌套表格等。EasyExcel提供了一系列的接口來支持這些複雜的情況。下面是一個示例:

@Data
public class DemoData {
    @ExcelProperty(value = {"表頭1", "子表頭1", "子子表頭1"}, index = 0)
    private String string;
    @ExcelProperty(value = {"表頭1", "子表頭1", "子子表頭2"}, index = 1)
    private Double doubleData;
    @ExcelProperty(value = {"表頭1", "子表頭2"}, index = 2)
    private String string1;
    @ExcelProperty(value = {"表頭2", "子表頭"}, index = 3)
    private String string2;
}

public class DemoDataListener extends AnalysisEventListener<DemoData> {
    @Override
    public void invoke(DemoData demoData, AnalysisContext context) {
        System.out.println(demoData);
    }
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {}
}

ExcelReader excelReader = EasyExcel.read("demo.xlsx", DemoData.class, new DemoDataListener()).build();
excelReader.read();
excelReader.finish();

在這個示例中,我們使用了@ExcelProperty註解指定Excel數據的列名和列索引,並且使用value屬性來支持多行標題。

七、EasyExcel模板導出

在實際的應用中,我們通常需要將數據導出到Excel模板中。EasyExcel提供了一個簡單的API來實現這個功能。下面是一個示例:

// 定義Excel導出器
ExcelWriter excelWriter = EasyExcel.write(outputStream).withTemplate(templateInputStream).build();
// 寫入數據
excelWriter.fill(data, new FillConfig().setForceNewRow(Boolean.TRUE));
// 關閉Excel導出器
excelWriter.finish();

在這個示例中,我們使用了ExcelWriter來將數據寫入到Excel模板中,並且使用fill()方法來填充數據。注意,在填充數據時,我們需要使用FillConfig實例來指定新的行必須寫入數據。

八、EasyExcel導入數據庫

在讀取Excel數據後,我們需要將數據存儲到數據庫中。EasyExcel提供了簡單的API來實現這個功能。下面是一個示例:

@Data
public class DemoData {
    @ExcelProperty(value = "用戶名", index = 0)
    private String username;
    @ExcelProperty(value = "密碼", index = 1)
    private String password;
}

public class DemoDataListener extends AnalysisEventListener<DemoData> {
    @Override
    public void invoke(DemoData demoData, AnalysisContext context) {
        System.out.println(demoData);
        // 保存數據到數據庫
        User user = new User();
        user.setUsername(demoData.getUsername());
        user.setPassword(demoData.getPassword());
        userRepository.save(user);
    }
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {}
}

ExcelReader excelReader = EasyExcel.read("demo.xlsx", DemoData.class, new DemoDataListener()).build();
excelReader.read();
excelReader.finish();

在這個示例中,我們使用了DemoData數據類存儲Excel數據,並且通過DemoDataListener數據監聽器將數據保存到數據庫中。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/257837.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-15 12:47
下一篇 2024-12-15 12:47

相關推薦

  • 為什麼不能用Microsoft Excel進行Python編程?

    Microsoft Excel是一個廣泛使用的數據分析工具,但是它不能直接用於Python編程。這是因為Microsoft Excel並不是一個編程工具,它的主要功能是進行數據處理…

    編程 2025-04-29
  • 基尼係數Excel計算模板

    這篇文章將介紹基尼係數Excel計算模板,為大家詳細闡述如何使用Excel進行基尼係數的計算。 一、模板下載及導入 首先需要下載基尼係數的Excel計算模板,可以在Excel中通過…

    編程 2025-04-28
  • 使用ReoGrid操作Excel的WPf應用

    本文將詳細闡述如何使用ReoGrid來操作Excel,重點介紹在WPF應用程序中使用ReoGrid的方法及注意點。 一、ReoGrid簡介 ReoGrid是一個基於.NET的開源組…

    編程 2025-04-27
  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分布式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web服務器。nginx是一個高性能的反向代理web服務器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25

發表回復

登錄後才能評論