服装定制网站模板,中文单页面网站模板免费下载,汕头网站建设推广价格,一个空间能放几个网站关注WX#xff1a;CodingTechWork
介绍 在日常开发中#xff0c;我们经常需要处理Excel文件中的数据。无论是从数据库导入数据、处理数据报表#xff0c;还是批量生成数据#xff0c;都可能会遇到需要读取和操作Excel文件的场景。本文将详细介绍如何使用Java中的Apache PO…关注WXCodingTechWork
介绍 在日常开发中我们经常需要处理Excel文件中的数据。无论是从数据库导入数据、处理数据报表还是批量生成数据都可能会遇到需要读取和操作Excel文件的场景。本文将详细介绍如何使用Java中的Apache POI库来读取Excel文件解析其中的数据并进行后续的处理。
项目背景
假设我们需要开发一个功能读取一个Excel文件中的数据并进行处理。通常这样的需求会出现在以下场景中
数据迁移将Excel表格的数据导入数据库。数据分析对Excel中的数据进行汇总、统计分析。批量处理从Excel文件中读取配置信息或参数进行批量处理。 在本篇文章中我们将展示如何使用Java读取Excel文件获取其中的数据并展示如何将这些数据转化为业务对象以便后续处理。
依赖导入
首先你需要在项目中添加Apache POI的依赖。这里使用的是Apache POI 3.x版本你可以在pom.xml中加入如下依赖
dependencygroupIdorg.apache.poi/groupIdartifactIdpoi-ooxml/artifactIdversion5.2.3/version
/dependency这个依赖包包括了读取xlsx格式的支持如果需要支持更老的xls格式可以再加上poi模块。
读取Excel模板的实现
接下来我们来看一个简单的示例代码展示如何读取Excel文件的内容并对数据进行处理。我们将以一个示例Excel表格为例假设表格的内容如下
姓名年龄性别张三25男李四30女王五28男
代码实现
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文件并进行数据处理的服务类*/
Service
Slf4j
public class ReadExcelServiceImpl {public Boolean readExcel() {try {String pathStr /path/to/your/excel/file.xlsx;// excel文件路径FileInputStream fis new FileInputStream(pathStr);// 创建一个工作簿对象Workbook workbook new XSSFWorkbook(fis);// 获取第一个工作表Sheet sheet workbook.getSheetAt(0);// 获取总行数int lastRowNum sheet.getLastRowNum();// 存放Excel读取的数据列表ListExcelDemoInfoDTO demoInfoList new ArrayList();// 读取数据。循环遍历行从第二行开始假设第一行是标题行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)); // 性别// 创建数据对象并设置字段ExcelDemoInfoDTO demoInfoDTO new ExcelDemoInfoDTO();demoInfoDTO.setName(cell0);demoInfoDTO.setAge(Integer.parseInt(cell1));demoInfoDTO.setGender(cell2);// 将数据对象加入到列表demoInfoList.add(demoInfoDTO);} catch (Exception e) {log.error(Error reading row {}, i, e);}}}// 使用Jackson将读取的数据转换为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)获取每一行的数据。我们从第二行开始读取i1因为第一行通常是标题行。获取单元格内容 通过row.getCell(i)获取每一列的内容并使用getCellValue方法根据单元格的类型字符串、数字等获取对应的值。封装数据 将每行的数据封装为一个业务对象ExcelDemoInfoDTO并将其加入到一个列表中。转换为JSON格式 使用Jackson库将读取的数据转化为JSON格式以便后续的处理或传输。资源关闭 使用完毕后关闭workbook和FileInputStream以释放资源。
ExcelDemoInfoDTO 数据传输对象
为了更好地封装数据我们创建一个简单的DTO数据传输对象类ExcelDemoInfoDTO
public class ExcelDemoInfoDTO {private String name;private int age;private String gender;// Getters and Setterspublic 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文件获取其中的数据并将这些数据封装为业务对象。通过这种方式我们可以灵活地读取各种格式的Excel数据并进行后续的业务处理。对于更复杂的Excel文件我们还可以进一步扩展代码来处理更多类型的单元格、跨工作表读取等情况。