POI和EasyExcel
狂神视频 https://www.bilibili.com/video/BV1Ua4y1x7BK
POI和EasyExcel都可以进行读写,但你使用最原生的io也可以进行读写,只不过比较麻烦
所以目前最流行的POI和EasyExcel这两个第三方组件、工具 就诞生了
使用场景
POI
POI比较复杂,量比较大的化会产生OOM
基本功能
HSSF对应着03版的excel,XSSF对应着07版的excel
EasyExcel
比POI简单并对其进行了优化,再大也不会有内存溢出
内存问题:
POI要读100w行会先加载到内存,众所周知内存很少,所以会报OOM
EasyExcel要读100w行,它是一行一行的读写,所以不会报OOM
创建poi项目
导入依赖,放入poi依赖的默认格式和ooxml格式
<dependencies>
<!--xls(03)-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.9</version>
</dependency>
<!--xlsx(07)-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>
<!--日期格式化工具-->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.10.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
03的样式
03版本代码
记住path路径后面加\\要不然生成不出来
public class ExcelWriteTest {
//项目路径
String PATH="D:\\IdeaProjects\\kuang-poi\\";
@Test
public void testWrite03() throws Exception {
//1.创建一个工作薄
Workbook workbook=new HSSFWorkbook();
//2.创建一个工作表
Sheet sheet=workbook.createSheet("统计表");
//3.创建一行,0是第一行
Row row1=sheet.createRow(0);
//4.创建一个单元格,定位是(1,1)
Cell cell1 = row1.createCell(0);
cell1.setCellValue("今日观众");
//定位为(1,2)写数据为666
Cell cell2=row1.createCell(1);
cell2.setCellValue(666);
//第二行(2,1)
Row row2=sheet.createRow(1);
Cell cell21 = row2.createCell(0);
cell21.setCellValue("统计时间");
//(2,2)
Cell cell22 = row2.createCell(1);
String time = new DateTime().toString("yyyy-MM-dd HH:mm:ss");
cell22.setCellValue(time);
//生成一张表 03版本就是使用xls结尾
FileOutputStream fileOutputStream = new FileOutputStream(PATH + "统计03.xls");
//输出
workbook.write(fileOutputStream);
//关闭流
fileOutputStream.close();
System.out.println("03版本生成完毕");
}
}
07版本代码
大致一样但是是XSSFworkbook结尾已xlsx结尾
@Test
public void testWrite07() throws Exception {
//1.创建一个工作薄
Workbook workbook=new XSSFWorkbook();
//2.创建一个工作表
Sheet sheet=workbook.createSheet("统计表");
//3.创建一行,0是第一行
Row row1=sheet.createRow(0);
//4.创建一个单元格,定位是(1,1)
Cell cell1 = row1.createCell(0);
cell1.setCellValue("今日观众");
//定位为(1,2)写数据为666
Cell cell2=row1.createCell(1);
cell2.