Apache POI 案例(Excel的文件操作)
在项目开发中,难免会遇到一些需要导出数据的业务,所以整理了一下基本的操作
POI介绍
Apache POI是用Java编写的免费开源的跨平台的Java工具,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能,其中使用最多的就是使用POI操作Excel文件
maven 坐标导入
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.14</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.14</version>
</dependency>
入门案例
public void excel() {
try {
//1.创建一个工作簿
Workbook workbook = new HSSFWorkbook();
//2.创建 一个工作表
Sheet sheet = workbook.createSheet("测试");
// CellStyle cellStyle = workbook.createCellStyle();
//3.创建一个6*6的单元格
for (int i = 0; i < 6; i++) {
Row row = sheet.createRow(i);
// 设置单元格格式
// row.setRowStyle(cellStyle);
row.createCell(0).setCellValue("测试行" + i);
row.createCell(1).setCellValue(i);
row.createCell(2).setCellValue(i);
row.createCell(3).setCellValue(i);
row.createCell(4).setCellValue(i);
row.createCell(5).setCellValue("测试数据");
}
/**
* 合并单元格
* new CellRangeAddress(0, 0, 1, 2) 里的四个参数分别代表
* --firstRow–第一行的索引
* --lastRow–最后一行的索引(含),必须等于或大于firstRow
* --firstCol–第一列的索引
* --lastCol–最后列的索引(包含),必须大于或等于firstCol
*/
sheet.addMergedRegion(new CellRangeAddress(0, 0, 1, 2
));
//生成一张表(IO流),03版本就是使用xls结尾
FileOutputStream fos = null;
// Path为定义的路径
fos = new FileOutputStream(Path + "测试.xls");
//输出
workbook.write(fos);
//关闭流
fos.close();
System.out.println("文件生成完毕");
} catch (Exception e) {
throw new RuntimeException(e);
}
}
运行后就会在对应的路径下找到生成的excel文件了。
读取excel内容
// 按照下标读取工作簿
sheet = workbook.getSheetAt(0);
// 遍历单元格
for (Row row : sheet) {
// 获取单元格
for (Cell cell : row) {
// 获取单元格中的内容
String value = cell.getStringCellValue();
System.out.println(value);
}
}
这里需要注意下:在读取cell单元格字符串时,当单元格有些类型不是String时,会报一个java.lang.IllegalStateException: Cannot get a STRING value from a NUMERIC cell异常。
因此需要把它先转化为纯String类型,然后在获取就可以了。
// 遍历单元格
for (Row row : sheet) {
// 获取单元格
for (Cell cell : row) {
// 设置单元格格式
cell.setCellType(CellType.STRING);
// 获取单元格中的内容
String value = cell.getStringCellValue();
System.out.println(value);
}
}