:如何把Excel的數據轉換成java對象? POI的使用-經驗觀點免费ppt模版下载-道格办公

如何把Excel的數據轉換成java對象? POI的使用

的數據轉換成Java對象,可以使用Apache POI庫來實現。下面是詳細的步驟和示例代碼:0x01_直接上代碼,將數據轉換成Java對象:```javaimport java.io.FileInputStream;import java.io.IOException;import java.util.ArrayList;import java.util .List;import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.userm


  • 0x01_直接上代碼,將數據轉換成Java對象

  • 0x02_POI 介紹

  • 0x03_Poi如何讀取操作表格?

  • 0x04_封裝成工具類


如何把Excel的數據轉換成java對象? POI的使用

最近的項目中用到了導入excel並且解析excel的業務,所以這裡專門做個記錄。

0x01_直接上代碼,將數據轉換成Java對象

< p data-tool='mdnice編輯器' >提前準備了一個excel表,然後準備了一些數據:

image-20221128164436382

然後準備實體類Good


import lombok.AllArgsConstructor;
import lombok. Data;

@Data
@AllArgsConstructor
public class Good {
private Integer id;
private String name;
private< /span> Integer count;
private Double price;
private String description;
}
< p data-tool='mdnice編輯器' >然後寫讀取的邏輯:(依賴在下面提供了,用的是最新版poi的相關依賴)

import org.apache.poi.ss.usermodel.Cell;
import< /span> org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org .apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

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

public class PoiRead {
public static void main(String[] args) {
try {
List<Good> ; goods = read('xlsx的路徑');
goods.forEach(System.out::println);
} catch (Exception e) {
e.printStackTrace();
}
}

public static List<Good> read(String path) throws Exception {
List<Good> goods = new ArrayList<> ;();
// 1. 創建輸入流
FileInputStream fip = new FileInputStream(path);
// 2.再輸入流中獲取工作簿
XSSFWorkbook workbook = new XSSFWorkbook(fip);
// 3. 在工作簿中獲取目標工作表
Sheet sheet = workbook.getSheetAt(0);
// 4. 獲取工作表中的行數(有數據的)
int rowNum = sheet.getPhysicalNumberOfRows();
// 5. 遍歷所有的行,但是要注意第一行標題不獲取,所以從下標1開始獲取< /span>
for(int i = 1;i<rowNum;i++){
// 獲取所有行
Row row = sheet.getRow(i);
if(row!=null){
//用於保存每條數據的集合
List<String> list = new ArrayList<>();
for ( Cell cell : row) {
if(cell!=null){
//設置單元格都是string類型
cell.setCellType(CellType.STRING);
//獲取所有單元格數據
String value = cell.getStringCellValue();
if(value!=null&&!value.equals('')){
//將每個單元格的數據存儲到集合中
list.add(value);
}
}
}
//把獲取到的每一條數據封裝成一個Product類型
if(list.size()>0){
Good good = new Good(Integer.parseInt( list.get(0)),list.get(1),Integer.parseInt(list.get(2)),Double. parseDouble(list.get(3)),list.get(4));
//將product封裝到list集合中
goods.add(good);
}
}
}
return goods;
}
}

執行效果:

image-20221128165612246

就把excel的一行一行數據轉換成了一個個對象。

0x02_POI 介紹

Poi是由apache公司提供的Java編寫的免費開源跨平台的Java API,提供讓Java程序對Microsoft Office檔案讀和寫的功能。也是目前針對Excel讀寫比較常用的實現方案。

使用前提,需要導入對應的依賴,在pom.xml

<!--poi相關依賴-->
<< span >dependency>
<groupId>org.apache.poi</groupId >
<artifactId>poi</artifactId>< /span>
<version>5.2.3</version>
</dependency>
<dependency>
< ;groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>< /span>
<dependency>
<groupId>org.projectlombok </groupId>
<artifactId>lombok</< span >artifactId>

<version>1.18.24</version>
<scope>provided</scope>
</dependency>

目前maven倉庫的最新的。

Poi包結構:

HSSF —— 讀寫 Microsoft Excel xls(07版本之前的Excel)

XSSF —— 讀寫 Microsoft Excel OOXML XLSX(07版本之後的Excel)

HWPF —— 讀寫 Word

HSLF —— 讀寫 PowerPoint(PPT)

其實主要用的就是XSSF

0x03_Poi如何讀取操作表格?

其實在Poi內部封裝了一些對象,用過excel的估計都很好理解下面的概念:

  • XSSFWorkbook:工作簿

  • XSSFSheet:工作表

  • Row:行

  • Cell:單元格

image-20221128165857524

0x04_封裝成工具類

以上方法對於任何實體類都應該能夠讀取並且封裝,所以考慮封裝成一個工具類,這樣就能處處使用了。

package com.bones.util;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache. poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf. usermodel.XSSFWorkbook;
import org.springframework.cglib.beans.BeanMap;

import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
< span >import java.util.Map;

/**
* 對應的依賴2個:poi 5.2.3 poi-ooxml:5.2.3
* /


public class ExcelUtil {
/ **
* 解析表格方法
* @param stream 文件輸入流
* @param clazz 實體類類型
* @return 解析表格的結果
* @throws Exception
*/

public static <T> List<T> readExcel(FileInputStream stream, Class<T> clazz) throws Exception {
List<T> result = new ArrayList<>();
// 1. 輸入流中獲取工作簿
XSSFWorkbook workbook = new XSSFWorkbook(stream);
// 2. 在工作簿中獲取目標工作表
Sheet sheet = workbook.getSheetAt( 0);
// 3. 獲取工作表中的行數(先獲取第一行數據,因為模板中第一行數據包含對應的字段)
int rowNum = sheet.getPhysicalNumberOfRows();
Row row = sheet.getRow(0);
// 4. 存儲所有實體類對應屬性的集合(用於映射)
List<String> key = new ArrayList<>();
// 5. 遍歷第一行數據,遍歷出所有要新增數據的屬性,並且放入到key集合中
for (Cell cell : row) {
cell.setCellType( CellType.STRING);
key.add(cell.getStringCellValue());
}
//6. 遍歷所有的正式數據,但是要注意第二行標題不獲取,所以從下標2開始獲取
for(int i = 2;i<rowNum;i++){
// 7. 獲取所有行
row = sheet.getRow(i);
if(row!=null ){
//8. 用於保存每條數據的Map,並且在Map中建立屬性與數據的映射關係
Map<String,String> excelMap = new HashMap<>();
// 計數器用於映射數據使用
int j = 0;
// 9. 遍歷所有單元格中的數據,並且把key和value(單元格的數據),放入到excelMap中進行映射
for (Cell cell : row) {
if(cell!=null){
//10. 把單元格中的所有數據格式設置為String
cell.setCellType(CellType.STRING);
//11. 獲取所有單元格數據
String value = cell. getStringCellValue();
if(value!=null&&!value.equals('')){
//12. 將每個單元格的數據存儲到集合中
excelMap.put(key.get(j),value);
j++;
}
}
}
// 12. 創建對應實體類類型
T t = clazz.newInstance();
/**
* Spring提供的BeanMap,通過反射的形式把Map中的數據映射到實體類中
*/

BeanMap beanMap = BeanMap.create(t);
beanMap.putAll(excelMap);< br> result.add(t);
}
}
return result;
}
}




文章為用戶上傳,僅供非商業瀏覽。發布者:Lomu,轉轉請註明出處: https://www.daogebangong.com/zh-Hant/articles/detail/How%20to%20convert%20Excel%20data%20into%20java%20objects%20Use%20of%20POIs.html

(810)
打賞 支付宝扫一扫 支付宝扫一扫
single-end

相關推薦