POI介绍
ApachePOI是用Java编写的免费开源的跨平台的JavaAPI,ApachePOI提供API给Java程序对MicrosoftOffice格式档案读和写的功能,其中使用最多的就是使用POI操作Excel文件。
maven坐标依赖
1 | <dependency> |
POI结构:
1 | HSSF-提供读写MicrosoftExcelXLS格式档案的功能 |
关于POI中基础API的使用,就不多介绍了,本文主要介绍对excel的处理-两个excel之间的数据拷贝
话不多说,现在开始!!
单元格样式个数限制
首先介绍一下POI中excel的单元格样式,工作簿Workbook中单元格样式个数是有限制的,所以在 程序中应该重复使用相同CellStyle,而不是为每个单元 格创建一个CellStyle
1 | HSSFCellStyle - 4000个 |
最大行数 | 最大列数 | 单元格样式个数 | 文本单元格最大长度 | 一个单元格上条件样式最大个数 | |
---|---|---|---|---|---|
HSSF | 65536 | 256(2^8) | 4000 | 32767 | 3 |
XSSF | 1048576 | 16384(2^14) | 64000 | Integer.MAX_VALUE |
其实在Workbook
的createCellStyle()
方法中,可以看到各个表格格式实现类对单元格样式的限制
如HSSFCellStyle:
1 | /** |
HSSFCellStyle:
1 | /** |
所以,如果在拷贝两个Workbook
的数据时,数据单元格数量过多,频繁使用createCellStyle()方法创建单元格样式,会导致单元格样式超出限制。
所以,为了解决单元格样式限制问题,可以将样式缓存起来,具体方法可见如下代码
1 | package com.huoli.ctar.cms.poi; |
调用示例:
1 | POICopyHandler poiCopyHandler = new POICopyHandler(fromWorkbook, toWorkbook); |