一个完整的 Excel 工作簿包含多个工作表,所以操作工作表之前要先得到完整的 Excel 工作簿对象,然后再从工作簿对象中拿到具体的工作表进行操作。
主要演示对上图 Excel 表格读取和写入操作,完成对第一个工作表中第二行第二列单元格数据的修改,对于 Excel 的操作我使用的是 Apache poi-ooxml 工具包,直接在 Maven 项目中引入下列依赖就行。
引入依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.16</version>
</dependency>
读写操作的流程
- 读取 Excel 文件,创建输入流对象
- 根据输入流创建一个 Excel 工作簿对象
- 获取工作簿中的某个工作表的 sheet 对象
- 从工作表中获取具体的行对象
- 从行对象中获取具体的单元格对象,并打印单元格中的数据
- 修改单元格的数据
- 创建文件的输出流对象并写入工作簿对象
读取 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
提示
获取单元格数据的时候,如果不确定单元格的数据类型,可以先拿到单元格的数据类型,再通过对应的数据类型获取单元格数据,避免程序报错。
获取单元格数据类型的示例
if(cell.getCellTypeEnum() == CellType.NUMERIC){
double value = cell.getNumericCellValue();
}