整个excle是一个工作簿,里面的sheet为一个工作表,每个sheet里面有行,行里面每个小格子叫做单元格;
03版和07版的后缀不同,xls和xlsx;
对象: HSSF 03的excle; XSSF 07版的excle;
HWPF: word
HSLF :ppt
HDGF: Visio
1.数据的导出(POI)
第一步: 导入依赖
<dependencies>
<!--xls03-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.9</version>
</dependency>
<!--xls07-->
<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.2</version>
</dependency>
<!--test-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
第二部:
public class ExcelWriteTest {
String PATH = "D:\\IdeaProjects_code\\EasyExcle";
@Test
public void testWriter03() throws IOException {
//1.创建一个工作簿
HSSFWorkbook workbook = new HSSFWorkbook();
//2.创建一个工作表
HSSFSheet sheet = workbook.createSheet("统计表");
//3.创建一个行
HSSFRow row1 = sheet.createRow(0);
//4.创建一个单元格
HSSFCell cell11 = row1.createCell(0);
cell11.setCellValue("增加的观众");
HSSFCell cell12 = row1.createCell(1);
cell12.setCellValue("666");
//创建第二行
HSSFRow row2 = sheet.createRow(1);
HSSFCell cell21 = row2.createCell(0);
cell21.setCellValue("统计时间");
HSSFCell cell22 = row2.createCell(1);
String time = new DateTime().toString("yyyy-MM-dd HH:mm:ss");
cell22.setCellValue(time);
//生成一张表(IO流) 03版以xls结尾
FileOutputStream fileOutputStream = new FileOutputStream(PATH + "03.xls");
//输出
workbook.write(fileOutputStream);
//关闭流
fileOutputStream.close();
System.out.println("统计完");
}
}
03版和07版的区别在于创建工作簿是的对象不同,03是HSSFWorkbook,07是XSSFWorkbook;后缀不同;
2.数据的批量导入(POI)
2.1 大文件写HSSF
缺点: 最多只能处理65535行,否则会抛异常;
优点: 过重中写入缓存,不操作磁盘,最后一次性写入磁盘,速度快;
2.2 大文件写XSSF
缺点: 写数据是速度非常慢,非常消耗内存,也会发生内存溢出,如数据100万条
优点: 可以写较大的数据,如20万条
2.3 大文件写SXSSF
优点: 可以写非常大的数据量,如100万条甚至更多条,写数据速度快,占用更少的内存;
注意:
过程中会产生临时文件,需要清理临时文件
默认有100条件记录被保存在内存中,如果超过这个数量,则最前面的数据被写入临时文件;
如果想自定义内存中数据的数量,可以使用new SXSSFWorkbook(数量)
;