使用 Java 读写 Excel 表格

233 阅读2分钟

一个完整的 Excel 工作簿包含多个工作表,所以操作工作表之前要先得到完整的 Excel 工作簿对象,然后再从工作簿对象中拿到具体的工作表进行操作。

oldsheet.png

主要演示对上图 Excel 表格读取和写入操作,完成对第一个工作表中第二行第二列单元格数据的修改,对于 Excel 的操作我使用的是 Apache poi-ooxml 工具包,直接在 Maven 项目中引入下列依赖就行。

引入依赖

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

读写操作的流程

  1. 读取 Excel 文件,创建输入流对象
  2. 根据输入流创建一个 Excel 工作簿对象
  3. 获取工作簿中的某个工作表的 sheet 对象
  4. 从工作表中获取具体的行对象
  5. 从行对象中获取具体的单元格对象,并打印单元格中的数据
  6. 修改单元格的数据
  7. 创建文件的输出流对象并写入工作簿对象

读取 Excel 文件,创建输入流对象

常规的 java 输入流创建

String filePath = "G:\\ceshi.xlsx";
//创建输入流
FileInputStream inputStream = new FileInputStream(filePath);

根据输入流创建一个 Excel 工作簿对象

将输入流对象传给 Apache poi 的 XSSFWorkbook 构造函数,创建一个工作簿对象

//创建工作簿
XSSFWorkbook workbook = new XSSFWorkbook(inputStream);

获取工作簿中的某个工作表的 sheet 对象

获取工作表,根据工作表的顺序获取或者根据工作表的名称获取

XSSFSheet sheet = workbook.getSheetAt(0);

从工作表中获取具体的行对象

获取第二行的行对象

XSSFRow row = sheet.getRow(1);

从行对象中获取具体的单元格对象,并打印单元格中的数据

获取上述第二行中第二列的单元格对象

XSSFCell cell = row.getCell(1);
System.out.println(cell.getStringCellValue());

修改单元格的数据

修改第二行第二列单元格数据

cell.setCellValue("Hello World");

创建文件的输出流对象并写入工作簿对象

调用工作簿对象的 write 方法,将新的工作簿数据写入输出流,保存到 Excel 文件

String filePath = "G:\\ceshi.xlsx";
FileOutputStream outputStream = new FileOutputStream(filePath);
workbook.write(outputStream);
outputStream.close();

使用上面代码修改第一个工作表中第二行第二列单元格数据后的 Excel

newsheet.png

提示
获取单元格数据的时候,如果不确定单元格的数据类型,可以先拿到单元格的数据类型,再通过对应的数据类型获取单元格数据,避免程序报错。

获取单元格数据类型的示例

if(cell.getCellTypeEnum() == CellType.NUMERIC){
	double value = cell.getNumericCellValue();
}