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

SpringBoot使用Apache POI庫讀取Excel文件的操作詳解

 更新時間:2025年01月06日 08:26:31   作者:Andya  
在日常開發(fā)中,我們經常需要處理Excel文件中的數(shù)據,無論是從數(shù)據庫導入數(shù)據、處理數(shù)據報表,還是批量生成數(shù)據,都可能會遇到需要讀取和操作Excel文件的場景,本文將詳細介紹如何使用Java中的Apache POI庫來讀取Excel文件,需要的朋友可以參考下

項目背景

假設我們需要開發(fā)一個功能,讀取一個Excel文件中的數(shù)據并進行處理。通常,這樣的需求會出現(xiàn)在以下場景中:

  • 數(shù)據遷移:將Excel表格的數(shù)據導入數(shù)據庫。
  • 數(shù)據分析:對Excel中的數(shù)據進行匯總、統(tǒng)計分析。
  • 批量處理:從Excel文件中讀取配置信息或參數(shù)進行批量處理。 在本篇文章中,我們將展示如何使用Java讀取Excel文件,獲取其中的數(shù)據,并展示如何將這些數(shù)據轉化為業(yè)務對象以便后續(xù)處理。

依賴導入

首先,你需要在項目中添加Apache POI的依賴。這里使用的是Apache POI 3.x版本,你可以在pom.xml中加入如下依賴:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.3</version>
</dependency>

這個依賴包包括了讀取xlsx格式的支持,如果需要支持更老的xls格式,可以再加上poi模塊。

讀取Excel模板的實現(xiàn)

接下來,我們來看一個簡單的示例代碼,展示如何讀取Excel文件的內容,并對數(shù)據進行處理。我們將以一個示例Excel表格為例,假設表格的內容如下:

姓名年齡性別
張三25
李四30
王五28

代碼實現(xiàn)

import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.stereotype.Service;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * 讀取Excel文件并進行數(shù)據處理的服務類
 */
@Service
@Slf4j
public class ReadExcelServiceImpl {

    public Boolean readExcel() {
        try {
            String pathStr = "/path/to/your/excel/file.xlsx";
            // excel文件路徑
            FileInputStream fis = new FileInputStream(pathStr);
            // 創(chuàng)建一個工作簿對象
            Workbook workbook = new XSSFWorkbook(fis);
            // 獲取第一個工作表
            Sheet sheet = workbook.getSheetAt(0);
            // 獲取總行數(shù)
            int lastRowNum = sheet.getLastRowNum();
            
            // 存放Excel讀取的數(shù)據列表
            List<ExcelDemoInfoDTO> demoInfoList = new ArrayList<>();

            // 讀取數(shù)據。循環(huán)遍歷行,從第二行開始,假設第一行是標題行
            for (int i = 1; i <= lastRowNum; i++) {
                log.info("Reading row {}", i);

                Row row = sheet.getRow(i);
                if (row != null) {
                    try {
                        // 獲取單元格的值
                        String cell0 = getCellValue(row.getCell(0)); // 姓名
                        String cell1 = getCellValue(row.getCell(1)); // 年齡
                        String cell2 = getCellValue(row.getCell(2)); // 性別

                        // 創(chuàng)建數(shù)據對象并設置字段
                        ExcelDemoInfoDTO demoInfoDTO = new ExcelDemoInfoDTO();
                        demoInfoDTO.setName(cell0);
                        demoInfoDTO.setAge(Integer.parseInt(cell1));
                        demoInfoDTO.setGender(cell2);

                        // 將數(shù)據對象加入到列表
                        demoInfoList.add(demoInfoDTO);

                    } catch (Exception e) {
                        log.error("Error reading row {}", i, e);
                    }
                }
            }

            // 使用Jackson將讀取的數(shù)據轉換為JSON字符串
            ObjectMapper mapper = new ObjectMapper();
            String json = mapper.writeValueAsString(demoInfoList);
            System.out.println(json);

            // 關閉資源
            workbook.close();
            fis.close();

        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

    /**
     * 獲取單元格的值,處理不同類型的單元格
     *
     * @param cell 單元格對象
     * @return 單元格的字符串值
     */
    private static String getCellValue(Cell cell) {
        if (cell == null) {
            return "";
        }

        switch (cell.getCellType()) {
            case STRING:
                return cell.getStringCellValue();
            case NUMERIC:
                return String.valueOf((int) cell.getNumericCellValue());
            default:
                return "";
        }
    }
}

代碼解析

  • 打開Excel文件 使用FileInputStream打開指定路徑的Excel文件,然后通過XSSFWorkbook將其加載為工作簿(Workbook)。
  • 讀取Excel工作表 通過workbook.getSheetAt(0)獲取第一個工作表(Sheet)。你可以根據需要更改getSheetAt中的索引值來獲取其他工作表。
  • 遍歷行和列 使用sheet.getRow(i)獲取每一行的數(shù)據。我們從第二行開始讀取(i=1),因為第一行通常是標題行。
  • 獲取單元格內容 通過row.getCell(i)獲取每一列的內容,并使用getCellValue方法根據單元格的類型(字符串、數(shù)字等)獲取對應的值。
  • 封裝數(shù)據 將每行的數(shù)據封裝為一個業(yè)務對象(ExcelDemoInfoDTO),并將其加入到一個列表中。
  • 轉換為JSON格式 使用Jackson庫將讀取的數(shù)據轉化為JSON格式,以便后續(xù)的處理或傳輸。
  • 資源關閉 使用完畢后,關閉workbook和FileInputStream以釋放資源。

ExcelDemoInfoDTO 數(shù)據傳輸對象

為了更好地封裝數(shù)據,我們創(chuàng)建一個簡單的DTO(數(shù)據傳輸對象)類ExcelDemoInfoDTO:

public class ExcelDemoInfoDTO {
    private String name;
    private int age;
    private String gender;

    // Getters and Setters
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }
}

總結

在本次實踐中,我們介紹了如何使用Apache POI庫在Java中讀取Excel文件,獲取其中的數(shù)據,并將這些數(shù)據封裝為業(yè)務對象。通過這種方式,我們可以靈活地讀取各種格式的Excel數(shù)據,并進行后續(xù)的業(yè)務處理。對于更復雜的Excel文件,我們還可以進一步擴展代碼來處理更多類型的單元格、跨工作表讀取等情況。

以上就是SpringBoot使用Apache POI庫讀取Excel文件的操作詳解的詳細內容,更多關于SpringBoot Apache POI庫讀取Excel的資料請關注腳本之家其它相關文章!

相關文章

  • Mybatis Plus使用條件構造器增刪改查功能的實現(xiàn)方法

    Mybatis Plus使用條件構造器增刪改查功能的實現(xiàn)方法

    這篇文章主要介紹了Mybatis-Plus使用條件構造器增刪改查,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-05-05
  • Java基于注解的Excel導出方式

    Java基于注解的Excel導出方式

    這篇文章主要介紹了Java基于注解的Excel導出方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Springboot項目瘦身之如何將jar包與lib依賴分開打包

    Springboot項目瘦身之如何將jar包與lib依賴分開打包

    這篇文章主要介紹了Springboot項目瘦身之如何將jar包與lib依賴分開打包問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • Java-IO流實驗

    Java-IO流實驗

    流是一種抽象概念,它代表了數(shù)據的無結構化傳遞。。用來進行輸入輸出操作的流就稱為IO流。換句話說,IO流就是以流的方式進行輸入輸出,希望能給您帶來幫助
    2021-06-06
  • springboot網站應用使用第三方qq登錄的實現(xiàn)過程

    springboot網站應用使用第三方qq登錄的實現(xiàn)過程

    這篇文章主要介紹了springboot網站應用使用第三方qq登錄,本文通過實例圖文相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • Mybatis-Plus多表關聯(lián)查詢的使用案例解析

    Mybatis-Plus多表關聯(lián)查詢的使用案例解析

    這篇文章主要介紹了Mybatis-Plus多表關聯(lián)查詢的使用,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • Spring配置動態(tài)數(shù)據源實現(xiàn)讀寫分離的方法

    Spring配置動態(tài)數(shù)據源實現(xiàn)讀寫分離的方法

    這篇文章主要介紹了利用Spring配置動態(tài)數(shù)據源實現(xiàn)讀寫分離的方法,文中通過示例代碼介紹的很詳細,相信對大家的理解和學習具有一定的參考借鑒價值,藕需要的朋友可以一起學習學習。
    2017-01-01
  • Spring溫故而知新系列教程之AOP代理

    Spring溫故而知新系列教程之AOP代理

    Spring AOP 是代理模式的應用,可以使用JDK提供的Proxy類或通過字節(jié)碼增強來實現(xiàn)。下面這篇文章主要給大家介紹了關于Spring之AOP代理的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2018-05-05
  • SpringBean管理與Spring Boot自動配置原理解析

    SpringBean管理與Spring Boot自動配置原理解析

    在Spring中,Bean的作用域(Scope)決定了Bean的實例化方式以及其生命周期,下面給大家介紹SpringBean管理與Spring Boot自動配置原理解析,感興趣的朋友一起看看吧
    2025-05-05
  • MyBatis Plus 實現(xiàn)多表分頁查詢功能的示例代碼

    MyBatis Plus 實現(xiàn)多表分頁查詢功能的示例代碼

    這篇文章主要介紹了MyBatis Plus 實現(xiàn)多表分頁查詢功能,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08

最新評論

溆浦县| 花莲市| 鸡东县| 宝清县| 崇仁县| 大姚县| 牙克石市| 洪湖市| 花垣县| 雷山县| 苍溪县| 江油市| 余庆县| 高碑店市| 历史| 襄城县| 白银市| 墨竹工卡县| 徐汇区| 正蓝旗| 安陆市| 昌都县| 周宁县| 龙里县| 宁国市| 莱芜市| 五峰| 连城县| 马鞍山市| 甘洛县| 崇信县| 类乌齐县| 当涂县| 清丰县| 巴林左旗| 南溪县| 启东市| 开阳县| 新民市| 青海省| 东阿县|