1、Apache POI介绍
Apache POI 是一个处理Miscrosoft Office文件格式的开源项目,在Java中可以用来对Miscrosoft Office的各种文件进行读写操作,本文是介绍Apache POI操作Excel的基础案例。
2、Apache POI操作Excel
- 引入pom依赖
org.apache.poipoi4.0.1org.apache.poipoi-ooxml4.0.1org.apache.poipoi-ooxml-schemas4.0.1
- 编写测试代码
说明:excel文件有两个版本,分为2003版本和2007版本,区别在于文件的后缀,分别对应xls和xlsx,操作时对应的实现类不一样,分别是HSSFWorkbook和XSSFWorkbook,其它用法都一样。
import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.ss.usermodel.Workbook;import org.apache.poi.xssf.usermodel.XSSFWorkbook;import org.junit.jupiter.api.Test;import org.springframework.boot.test.context.SpringBootTest;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;@SpringBootTestclass TestApachePOI {/** * 读取Excel表格所有数据 */@Testpublic void readAllRowTest() throws IOException {// 1. 读取Excel资源的输入流,路径是当前文件的相对路径InputStream inputStream = TestApachePOI.class.getResourceAsStream("/excel/上传货物模板2.xls");// 2. 创建一个工作铺// 注意:03版本(.xls后缀)的Excel对应的实现类是 HSSFWorkbook//04版本(.xlsx后缀)的Excel对应的实现类是 XSSFWorkbookWorkbook workbook = new HSSFWorkbook(inputStream);// 3. 获取一个工作单位Sheet sheet = workbook.getSheetAt(0);// 4. 获取一行Row row = sheet.getRow(0);// 5. 得到单元格System.out.print(row.getCell(1).getStringCellValue() + "\t");System.out.print(row.getCell(2).getStringCellValue() + "\t");System.out.print(row.getCell(3).getStringCellValue() + "\t");System.out.print(row.getCell(4).getStringCellValue() + "\t");System.out.print(row.getCell(5).getStringCellValue() + "\t");System.out.print(row.getCell(6).getStringCellValue() + "\t");System.out.print(row.getCell(7).getStringCellValue() + "\t");System.out.print(row.getCell(8).getStringCellValue() + "\t");System.out.print(row.getCell(9).getStringCellValue() + "\t");System.out.println();// 得到excel表格的所有行数int rows = sheet.getPhysicalNumberOfRows();// 遍历读取其它所有行数for (int i = 1; i < rows; i++) {// 得到行row = sheet.getRow(i);// 输入单元格数据System.out.print(row.getCell(1).getStringCellValue() + "\t");System.out.print(row.getCell(2).getStringCellValue() + "\t");System.out.print(row.getCell(3).getNumericCellValue() + "\t");System.out.print(row.getCell(4).getStringCellValue() + "\t");System.out.print(row.getCell(5).getNumericCellValue() + "\t");System.out.print(row.getCell(6).getNumericCellValue() + "\t");System.out.print(row.getCell(7).getNumericCellValue() + "\t");System.out.print(row.getCell(8).getStringCellValue() + "\t");System.out.print(row.getCell(9).getStringCellValue() + "\t");System.out.println();}}/** *创建表格并且写入数据*/@Testpublic void createExcel() throws Exception {// 1. 创建工作簿Workbook workbook = new XSSFWorkbook();// 2. 创建工作单元Sheet sheet = workbook.createSheet("最酷男生表");// 3. 创建行Row row = sheet.createRow(0);// 4. 创建单元格并设置内容row.createCell(0).setCellValue("姓名");row.createCell(1).setCellValue("年龄");row.createCell(2).setCellValue("身高");row.createCell(3).setCellValue("收入");row.createCell(4).setCellValue("人品");// 5. 写出工作簿workbook.write(new FileOutputStream("E:/contact.xlsx"));}}
- 代码中读取的表格数据