赞
踩
普通的Excel文件的读写,我们可以通过Apache POI提供的excel格式文件的解析来实现,当遇到超大容量的Excel,如100万的数据的解析, 除了可以用POI提供的SXSSFWorkbook来解析,还可以使用alibab的EasyExcell来实现. 两种方法的具体使用流程如下(顺便对比以下在该方法下数据的解析速度)
和普通的Excel的写入造作类似,只是需要创建时选择的实体类换成SXSSFWork ,在写入时将原本小数据换成10万或更大的数据即可。
- Workbook workbook = new SXSSFWorkbook();
- FileOutputStream out = new FileOutputStream("c:\\text\\100w.xlsx")
我们在写入一个1000000万大容量数据时 ,我们设置一个计数器来观察写入速度。
使用EasyExcel写入超大容量的Excel时,我们需要先做一些准备工作。
首先还是需要导入jar包(对jar包的要求比较严格,必须版本是需要相互匹配兼容的)
导入jar包后,还需要准备一个实体类,为把数据写入Excel表格的列头和信息匹配做准备。
以Order订单实体类来举例:
除了实体类外。我们还需要准备一个Converter转换类。(具体作用在上面的绿色框里有体现设置时间格式等作用,如有需要,可自行复制粘贴即可)
- public class LocalDateTimeConverter implements Converter<LocalDateTime> {
-
- @Override
- public Class<LocalDateTime> supportJavaTypeKey() {
- return LocalDateTime.class;
- }
-
- @Override
- public CellDataTypeEnum supportExcelTypeKey() {
- return CellDataTypeEnum.STRING;
- }
-
- @Override
- public LocalDateTime convertToJavaData(CellData cellData, ExcelContentProperty contentProperty,
- GlobalConfiguration globalConfiguration) {
- return LocalDateTime.parse(cellData.getStringValue(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
- }
-
- @Override
- public CellData<String> convertToExcelData(LocalDateTime value, ExcelContentProperty contentProperty,
- GlobalConfiguration globalConfiguration) {
- return new CellData<>(value.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
- }
-
- }
至此,我们的准备工作已经算是完成了。可以开始执行写入或者读取的工作了。
写入100万数据的操作:
超大Excel的读取:
10万数据的读取所用时间3561毫秒。
如果是用普通POI读取Excel的XSSF,10万或者100万能不能在不溢出情况下读下来都不能确定,就算内存和cpu足够坚强,能够坚持读取完成,但所耗费的时间是超级长的,使用POI的SXSSF或者EasyExcel读取超大容量的Excel文件的便捷和高效性比使用XSSF实用性高太多。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。