当前位置:首页 > 生活百科

poi读取excel数据(poi读取excel数字类型)

栏目:生活百科日期:2024-12-26浏览:0

POI实现大数据的导入

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

用户模式:有许多分装好的方法操作简单事件模式:基于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);//从第二行获取数据List&<MesAdmin&>mesAdmins=newArrayList&<&>();//从第二行读取数据for(intrown=1;rown&<sheet.getLastRowNum();rown++){Rowrow=sheet.getRow(rown);MesAdminmesAdmin=newMesAdmin();for(intcelln=0;celln&<row.getLastCellNum();celln++){//此处为数据每行数据以及对每行数据进行操作}}returnCommonResult.success(ResultCode.SUCCESS);}

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

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

方法作用public void startRow(int i)开始读取行public void endRow(int i)结束读取行public void cell(String s, String s1, XSSFComment xssfComment)读取行中单元

需求分析

使用POI的SAX模式解析EXCEl文件

解决方案

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

步骤分析

设置POI的时间模式

1.根据Excel获取文件流

2.根据文件流创建OPCPackage

3.创建XSSFReader对象

SAX解析

1.自定义Sheet处理器

2.创建Sax的XmlReader

3.设置Sheet事件处理器

4.逐行读取

原理分析

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

代码实现

自定义实现XSSFSheetXMLHandler.SheetContentsHandler处理器

packagecom.macro.mall.tiny.config;importorg.apache.poi.xssf.eventusermodel.XSSFSheetXMLHandler;importorg.apache.poi.xssf.usermodel.XSSFComment;importjava.util.ArrayList;importjava.util.List;//自定义Sheet给予Sax解析处理器publicclassMesSheetHandlerimplementsXSSFSheetXMLHandler.SheetContentsHandler{//行信息privateList&<String&>lRows=newArrayList&<String&>();//处理一行信息@OverridepublicvoidstartRow(inti){if(i&>0){lRows.clear();}}/***解析行*@parami*/@OverridepublicvoidendRow(inti){//可以每行都对数据进行插入操作,也可以使用监听进行数据操作System.out.println("i:"+lRows.get(0));}/***逐单元读取数据*@params*@params1*@paramxssfComment*/@Overridepublicvoidcell(Strings,Strings1,XSSFCommentxssfComment){if(lRows!=null){lRows.add(s1);}else{lRows.add("");}}}

在Controller层实现解析

@ApiOperation(value="批量导入用户数据")@RequestMapping(value="/importpoi",method=RequestMethod.POST)@ResponseBodypublicCommonResultimportExcelpoiSax(@RequestParam(name="file")MultipartFilemultipartFile,HttpServletRequestrequest)throwsException{//Stringfile="C:/Users/180454/Downloads/1.xlsx";//根据Eccel获取OPCPackage对象OPCPackagepkg=OPCPackage.open(multipartFile.getInputStream());//try{//创建XSSFReaderXSSFReaderxssfReader=newXSSFReader(pkg);//获取SharedStringTable对象SharedStringsTablesharedStringsTable=xssfReader.getSharedStringsTable();//获取StylesTable对象StylesTablestyles=xssfReader.getStylesTable();XMLReaderxmlReader=XMLReaderFactory.createXMLReader();MesSheetHandlermesSheetHandler=newMesSheetHandler();xmlReader.setContentHandler(newXSSFSheetXMLHandler(styles,sharedStringsTable,mesSheetHandler,false));XSSFReader.SheetIteratorsheets=(XSSFReader.SheetIterator)xssfReader.getSheetsData();//每一个Sheetwhile(sheets.hasNext()){InputStreamsheetstream=sheets.next();InputSourcesheetSource=newInputSource(sheetstream);try{xmlReader.parse(sheetSource);LOGGER.info("row:"+"结束");}finally{sheetstream.close();}}}finally{pkg.close();}returnCommonResult.success(ResultCode.SUCCESS);}

总结:

通过简单地介绍Excel读取数据的两种模式,可以发现在用户模式下Excel读取实现简单但是内存占用量大,不理想,而事件模式操作比较繁琐,但是可以读取大文件的Excel。

“poi读取excel数据(poi读取excel数字类型)” 的相关文章

奶茶机器全套设备需要多少钱(开奶茶店所需设备清单)

想开好一家奶茶店前期需要对这个行业有所了解,例如:店铺选址,制作奶茶饮品需要的机器设备有哪些,奶茶机器设备选购技巧等等,这些都需要提前了解清楚。开家奶茶店说简单...

儿童游泳裤什么牌子好(简介十大儿童游泳裤品牌及报价)

夏季炎热,游泳是首选清凉健身运动。那儿童泳衣品牌有哪些呢?儿童泳衣什么牌子好呢?下面就跟着心贝亲子网小编一起来看看吧。常见儿童泳衣品牌1.Arena阿瑞娜Are...

开店准备工作有哪些,新手必看开店步骤

有句话说的好:一个篱笆三个桩,一个好汉三个帮!在这个信息社会背景下,大众创业已然成为一种常态影响我们的方方面面。成功OR失败?对于创业者来说,一个人的聪明才智是...

wifi密码查看器怎么使用(WiFi万能钥匙正确打开方式)

密码太多时,我们总会忘记。特别是一些WIFI密码。特别是在学校和工作中,电脑连接了WIFI。这时,有小伙伴来问密码是多少。这时,我们怎么查看电脑已经连接的WIF...

gtx950m什么级别显卡(2023年显卡性能排名)

现如今游戏本已经成为了大多数游戏玩家的首选,目前市面上主流游戏本多配备GTX950M与GTX960M两种独立显卡。那么,当你选择游戏本时是否在GTX950M与G...

制作工资条的步骤方法,工资条折叠方法图解

员工离职的原因千千万万,终究归纳二点,一是钱,没给够;二是心,委屈了。今天我们来谈谈跟钱有关的,那就是员工的工资条,每当发工资了,人事都会给你发一个工资条,今天...

利润率是什么意思,利润率的计算公式

利润率如何计算?利润率是剩余价值与全部预付资本的比率,利润率是剩余价值率的转化形式,是同一剩余价值量不同的方法计算出来的另一种比率。如以p`代表利润率,C代表全...

大学生创业策划书,一份完整的奶茶店创业计划书

缺资金、缺好项目、缺有效的指导、缺实战的经验,刚从象牙塔走出来的大学生一头扎进大市场里,常常会因此感到力不从心。其实,只要你有创业的意愿、一份好的商业计划书,你...

mac数据库工具推荐(macbook型号对照表)

为大家推荐一款专业的数据库管理软件,ValentinaStudioProforMac支持连接所有主要数据库,可以帮助用户轻松创建、管理、查询和浏览Valenti...

excel序号自动更新函数(序号排序规则)

Excel高手都知道序号的重要性,序号就好比盐,您永远不会感觉到它们的存在,但它们的缺失会使您的数据变得毫无味道。确实,它们很重要,因为有了序号,每个条目的数据...