当前位置:XML > XML历史

POI实现大批量数据的读取

白癜风怎么能治好 http://m.39.net/pf/a_6706972.html

POI实现大数据的导入

之前介绍过通过POI实现数据的导出以及百万数据的导出,今天介绍一般数据以及大数据集的数据导入。之前介绍过POI操作Excel的三种模式:

用户模式:有许多分装好的方法操作简单事件模式:基于SAX方式解析XML,他是一个接口,是一种XML解析的替代方法,不同于DOM解析XML文档时把所有数据内容一次性加载到内存,他是逐行扫描SXSSF对象:生成海量Excel数据文件POI基于用户模式的数据导出

主要步骤:

根据上传信息创建Workbok根据Workbook创建Sheet读取Sheet行中数据

ApiOperation(value=导入数据)

RequestMapping(value=/importpoi,method=RequestMethod.POST)

ResponseBodypublicCommonResultimportExcelPOI(

RequestParam(name=file)MultipartFileimportfile)throwsException{//根据上传信息创建workboolWorkbooksheets=WorkbookFactory.create(importfile.getInputStream());//创建一个sheetSheetsheet=sheets.getSheetAt(0);//从第二行获取数据ListMesAdminmesAdmins=newArrayList();//从第二行读取数据for(intrown=1;rownsheet.getLastRowNum();rown++){Rowrow=sheet.getRow(rown);MesAdminmesAdmin=newMesAdmin();for(intcelln=0;cellnrow.getLastCellNum();celln++){//此处为数据每行数据以及对每行数据进行操作}}returnCommonResult.success(ResultCode.SUCCESS);}

使用POI的SAX(事件)模式读取百万数据

POI在对Excel的XML解析以及做了一些封装,我们只有实现这些封装姐可以安装SAX方式进行读取Excel,主要就是要实现XSSFSheetXMLHandler.SheetContentsHandler接口,给接口有三个方式需要我们去实现:

方法作用publicvoidstartRow(inti)开始读取行publicvoidendRow(inti)结束读取行publicvoidcell(Strings,Strings1,XSSFCommentxssfComment)读取行中单元

需求分析

使用POI的SAX模式计息EXCEl文件

解决方案

使用SAX模式,逐行扫描文件,一边扫描一遍解析。不需要将数据存储到内存,对于大型文档解析具有很大优势。

步骤分析

设置POI的时间模式1.根据Excel获取文件流

2.根据文件流创建OPCPackage

3.创建XSSFReader对象

SAX解析1.自定义Sheet处理器

2.创建Sax的XmlReader

3.设置Sheet事件处理器

4.逐行读取

原理分析

Excel的本质就是一种特殊的XML存储数据,这样就可以使用基于SXA的方式去解析XML完成对Excel的读取。SAX提供一种从XML文档读取数据的机制,逐行扫描文档,一边扫描一边解析,解析原理如图:

代码实现

自定义实现XSSFSheetXMLHandler.SheetContentsHandler处理器

package


转载请注明:http://www.vviuov.com/xgyy/1063250.html