介绍:Apache POI是Apache软件基金会的开放源码函式库,POl提供API给Java程序对Microsoft Office格式档案读和写的功能。
POI分为两个版本,分别是03版本xls和07版本xlsx,03版本最多支持65536行,07版本理论无限行。
先看下图,理解哪个是工作簿,哪个是工作表,哪个是行,哪个是单元格,只有这几个都理解了,后面代码创建才能很快入手。
步骤一:IDEA创建meavn工程空项目
步骤二:导入pom依赖,根据需要导入,我这里演示03版本和07版本,所以两个都导入了,还有一个测试类
步骤三:编写测试
首先创建工作簿,用到了Workbook对象,他是一个接口,有三个实现类,如下图:
03版本代码如下:
//03版本
@Test
public void excel03() throws Exception {
//1.创建工作簿,
Workbook workbook = new HSSFWorkbook();
//2.创建工作表
Sheet sheet = workbook.createSheet("03版本");
//3.创建行,0代表第一行
Row row = sheet.createRow(0);
//4.创建一个单元格
Cell cell = row.createCell(0);
//5.第一个单元格的内容
cell.setCellValue("姓名:");
//第一行的第二个单元格
Cell cell1 = row.createCell(1);
cell1.setCellValue("尼采");
//创建第二行
Row row2 = sheet.createRow(1);
//第二行第一个单元格
Cell cell21 = row2.createCell(0);
cell21.setCellValue("性别:");
//第二行第二个单元格
Cell cell22 = row2.createCell(1);
cell22.setCellValue("男");
//定义一个表的存储路径
String path="D:\\JAVA2020\\POI\\src\\main\\resources";
//生成一张表(注意03版本后缀是xls)
FileOutputStream fileOutputStream = new FileOutputStream(path+"03版本用户信息表.xls");
//通过io流输出
workbook.write(fileOutputStream);
//记得关流
fileOutputStream.close();
System.out.println("写入成功");
}
03版本输出效果:
07版本与03版本一样,只是对象不一样,换个对象,文件后缀名改为xlsx即可
07代码如下:
//07版本
@Test
public void excel07() throws Exception {
//1.创建工作簿,
Workbook workbook = new XSSFWorkbook();
//2.创建工作表
Sheet sheet = workbook.createSheet("07版本");
//3.创建行,0代表第一行
Row row = sheet.createRow(0);
//4.创建一个单元格
Cell cell = row.createCell(0);
//5.第一个单元格的内容
cell.setCellValue("姓名:");
//第一行的第二个单元格
Cell cell1 = row.createCell(1);
cell1.setCellValue("尼采");
//创建第二行
Row row2 = sheet.createRow(1);
//第二行第一个单元格
Cell cell21 = row2.createCell(0);
cell21.setCellValue("性别:");
//第二行第二个单元格
Cell cell22 = row2.createCell(1);
cell22.setCellValue("男");
//定义一个表的存储路径
String path="D:\\JAVA2020\\POI\\src\\main\\resources";
//生成一张表(注意03版本后缀是xls)
FileOutputStream fileOutputStream = new FileOutputStream(path+"07版本用户信息表.xlsx");
//通过io流输出
workbook.write(fileOutputStream);
//记得关流
fileOutputStream.close();
System.out.println("写入成功");
}
07版本效果:
07加速版,换个对象,加个清楚临时文件的语句,其他不变
代码:
//07加速版
@Test
public void excel07BigData() throws Exception {
//1.创建工作簿,
Workbook workbook = new SXSSFWorkbook();
//2.创建工作表
Sheet sheet = workbook.createSheet("07加速版本");
for (int rowNum = 0; rowNum < 1000; rowNum++) {
//3.创建行
Row row = sheet.createRow(rowNum);
for (int i = 0; i < 10; i++) {
//4.创建单元格
Cell cell = row.createCell(i);
//每个单元格数据
cell.setCellValue(i);
}
}
//定义一个表的存储路径
String path="D:\\JAVA2020\\POI\\src\\main\\resources";
//生成一张表(注意03版本后缀是xls)
FileOutputStream fileOutputStream = new FileOutputStream(path+"07加速数字表.xlsx");
//通过io流输出
workbook.write(fileOutputStream);
//记得关流
fileOutputStream.close();
//清除临时文件
((SXSSFWorkbook)workbook).dispose();
System.out.println("写入成功");
}
效果:
都很简单,只要明白两个版本区别,理解工作簿,工作表,行,单元格就可以很好写代码了。