Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office(Excel、WORD、PowerPoint、Visio等)格式档案读和写的功能。
如果有更多需要读取的word文档请参见官方网站
官网主页 API文档
POI结构:
HSSF - 提供读写Microsoft Excel XLS格式档案的功能
XSSF - 提供读写Microsoft Excel OOXML XLSX格式档案的功能(我们使用)
HWPF - 提供读写Microsoft Word DOC格式档案的功能
HSLF - 提供读写Microsoft PowerPoint格式档案的功能
HDGF - 提供读Microsoft Visio格式档案的功能
HPBF - 提供读Microsoft Publisher格式档案的功能
HSMF - 提供读Microsoft Outlook格式档案的功能
我们使用:XSSF - 提供读写Microsoft Excel OOXML XLSX格式档案的功能
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>
格式区分,这里是解析.xlsx后缀的–> 工作表
这个是–> 工作簿
**
使用POI可以从一个已经存在的Excel文件中读取数据
**
@Test
public void readExcel2(){
try {
//创建工作簿:一个工作簿就是一个excel文件
Workbook workbook = new XSSFWorkbook("D:/read.xlsx");
//获取工作表
Sheet sheet = workbook.getSheetAt(0);
int lastRowNum = sheet.getLastRowNum();//获取最大有多少行,作为遍历行结束标志
for(int i=0; i<=lastRowNum;i++){
Row row = sheet.getRow(i);//获得一个 行 对象
short lastCellNum = row.getLastCellNum();//获取最大有多少列,作为遍历列结束标志
for(int j=0;j<lastCellNum;j++){
Cell cell = row.getCell(j);
String cellValue = cell.getStringCellValue();//读取一个String字符元素 注意:如果是数字将会报错
System.out.println("cellValue = " + cellValue);
}
}
//关闭对象
workbook.close();
} catch (IOException e) {
e.printStackTrace();
}
}
【小结】
通过上面的入门案例可以看到,POI操作Excel表格封装了几个核心对象:
XSSFWorkbook:工作簿
XSSFSheet:工作表
XSSFRow:行
XSSFCell:单元格
有可能出现的错误
解决方式
写数据
@Test
public void writeExcel(){
try {
//创建工作簿:在内存中创建一个文件对象。
Workbook workbook = new XSSFWorkbook();
//创建工作表
Sheet sheet = workbook.createSheet("工作表1");
//创建行,并且往行的列中写数据
Row row = sheet.createRow(0);
row.createCell(0).setCellValue("姓名");
row.createCell(1).setCellValue("年龄");
row.createCell(2).setCellValue("地址");
row = sheet.createRow(1);
row.createCell(0).setCellValue("张三");
row.createCell(1).setCellValue("22");
row.createCell(2).setCellValue("北京");
row = sheet.createRow(2);
row.createCell(0).setCellValue("丽思");
row.createCell(1).setCellValue("21");
row.createCell(2).setCellValue("上海");
row = sheet.createRow(3);
row.createCell(0).setCellValue("王五");
row.createCell(1).setCellValue("25");
row.createCell(2).setCellValue("深圳");
//将内存文件数据写入到本地文件里
OutputStream out = new FileOutputStream("D:/write.xlsx");
workbook.write(out);
//关闭对象
out.close();
workbook.close();
} catch (Exception e) {
e.printStackTrace();
}
}
效果图