当前位置: 首页 > news >正文

Java操作Excel文档

1 导入pom依赖

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

2 具体代码

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.*;
import java.util.ArrayList;
import java.util.List;public class ExcelUtils {// xlsx文件表头private static final String[] HEADERS = {"id", "name", "age", "department"};private static void createHeaderRow(Sheet sheet) {Row headerRow = sheet.createRow(0);for (int i = 0; i < HEADERS.length; i++) {headerRow.createCell(i).setCellValue(HEADERS[i]);}}// 创建excel文件public static void createExcel(String filePath) throws IOException {try (Workbook workbook = new XSSFWorkbook()) {Sheet sheet = workbook.createSheet("雇员信息");createHeaderRow(sheet);try (FileOutputStream fos = new FileOutputStream(filePath)) {workbook.write(fos);}}}// 辅助方法private static Workbook getWorkbook(String filePath) throws IOException {File file = new File(filePath);if (!file.exists()) {createExcel(filePath);}try (FileInputStream fis = new FileInputStream(filePath)) {return WorkbookFactory.create(fis);}}private static void setCellValue(Cell cell, Object value) {if (value instanceof String) {cell.setCellValue((String) value);} else if (value instanceof Integer) {cell.setCellValue((Integer) value);} else if (value instanceof Double) {cell.setCellValue((Double) value);} else if (value instanceof Boolean) {cell.setCellValue((Boolean) value);}}private static void saveWorkbook(Workbook workbook, String filePath) throws IOException {try (FileOutputStream fos = new FileOutputStream(filePath)) {workbook.write(fos);}}private static Object getCellValue(Cell cell) {switch (cell.getCellType()) {case STRING:return cell.getStringCellValue();case NUMERIC:return cell.getNumericCellValue();case BOOLEAN:return cell.getBooleanCellValue();case FORMULA:return cell.getCellFormula();default:return "";}}// 写数据到excelpublic static void writeDataToExcel(String filePath, List<Object[]> data) throws IOException {try (Workbook workbook = getWorkbook(filePath)) {Sheet sheet = workbook.getSheetAt(0);int lastRowNum = sheet.getLastRowNum();for (Object[] rowData : data) {Row row = sheet.createRow(++lastRowNum);for (int i = 0; i < rowData.length; i++) {Cell cell = row.createCell(i);setCellValue(cell,rowData[i]);}}saveWorkbook(workbook,filePath);}}// 更新excel中的数据public static void updateDataInExcel(String filePath,int rowIndex,int colIndex,Object newValue) throws IOException {try(Workbook workbook = getWorkbook(filePath)) {Sheet sheet = workbook.getSheetAt(0);Row row = sheet.getRow(rowIndex);if(row==null){row = sheet.createRow(rowIndex);}Cell cell = row.getCell(colIndex,Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);setCellValue(cell,newValue);saveWorkbook(workbook,filePath);}}// 读取excel数据public static List<List<Object>> readDataFromExcel(String filepath) throws IOException {List<List<Object>> data = new ArrayList<>();try(Workbook workbook = getWorkbook(filepath)){Sheet sheet = workbook.getSheetAt(0);for (Row row : sheet) {if(row.getRowNum() == 0) continue; // 跳过表头List<Object> rowData = new ArrayList<>();for (Cell cell : row) {rowData.add(getCellValue(cell));}data.add(rowData);}}return data;}// 测试用例public static void main(String[] args) {try{String filepath = "employee.xlsx";// 1 创建excel文件createExcel(filepath);System.out.println("excel文件创建成功");// 2 写入数据List<Object[]> dataToWrite = new ArrayList<>();dataToWrite.add(new Object[]{"E001","张三",28,"研发部"});dataToWrite.add(new Object[]{"E002","李四",32,"市场部"});writeDataToExcel(filepath,dataToWrite);System.out.println("数据写入成功");// 3 读取数据List<List<Object>> readData = readDataFromExcel(filepath);System.out.println("读取数据");readData.forEach(System.out::println);// 4. 更新数据updateDataInExcel(filepath, 1, 2, 33); // 将李四的年龄从32改为33System.out.println("数据更新成功");// 验证更新结果List<List<Object>> updatedData = readDataFromExcel(filepath);System.out.println("更新后的数据:");updatedData.forEach(System.out::println);} catch (IOException e) {e.printStackTrace();}}
}
http://www.xdnf.cn/news/1193113.html

相关文章:

  • opencv学习(图像金字塔)
  • 背包问题及 LIS 优化
  • 告别配置混乱!Spring Boot 中 Properties 与 YAML 的深度解析与最佳实践
  • C#编程基础:运算符与结构详解
  • 【Android】相对布局应用-登录界面
  • 2025.7.26字节掀桌子了,把coze开源了!!!
  • window下MySQL安装(三)卸载mysql
  • Fast_Lio 修改激光雷达话题
  • VLAN的划分(基于华为eNSP)
  • MySQL 8.0 OCP 1Z0-908 题目解析(37)
  • 尝试几道算法题,提升python编程思维
  • Linux内核设计与实现 - 课程大纲
  • LeetCode 1074:元素和为目标值的子矩阵数量
  • 使用Spring Boot创建Web项目
  • 学习嵌入式的第三十二天-数据结构-(2025.7.24)IO多路复用
  • 开发者说|RoboTransfer:几何一致视频世界模型,突破机器人操作泛化边界
  • 1. Qt多线程开发
  • SpringMVC——建立连接
  • OpenFeign-远程调用
  • 计算机中的数据表示
  • Windows Server系统安装JDK,一直卡在“应用程序正在为首次使用作准备,请稍候”
  • Java程序员学从0学AI(六)
  • 框架式3D打印机结构设计cad【9张】三维图+设计说明书
  • openmv特征点检测
  • 如何使用Anaconda(miniconda)和Pycharm
  • Java 大视界 -- Java 大数据在智能安防视频监控系统中的视频语义理解与智能检索进阶(365)
  • x86汇编语言入门基础(三)汇编指令篇5 串操作
  • Windows11下和Vmware中的Ubuntu22.04设置samba服务遇到的一个问题- valid users和guest设置冲突
  • 零基础学习性能测试第三章:jmeter构建性能业务场景
  • java网络请求工具类HttpUtils