首页 > 作文

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

更新时间:2023-04-05 04:50:53 阅读: 评论:0

poi实现大数据的导入

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

用户模式:有许多分装好的方法操作简单事件模式:基于sax方式解析xml,他是一个接口,是一种xml解析的替代方法,不同于dom解析xml文档时把所有数据内容一次性加载到内存,他是逐行扫描sx活动方案设计ssf对象:生成海量excel数据文件

poi基于用户模式的数据导出

主要步骤:根据上传信息创建workbok根据workbook创建sheet读取sheet行中数据

@apioperation(value="导入数据")@requestmapping(value="/importpoi",method=requestmethod.post)@responbodypubliccommonresultimportexcelpoi(@requestparam(name="file")multipartfileimportfile)throwxception{//根据上传信息创建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解析

21条不平等条约内容

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.eventurmodel.xssfsheetxmlhandler;importorg.apache.poi.xssf.urmodel.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);}el{lrows.add("");}}}

在controller层实现解析

@apioperation(value="批量导入用户数据")@requestmapping(value="/importpoi",method=requestmethod.post)@responbodypubliccommonresultimportexcelpoisax(@requestparam(name="file")multipartfilemultipartfile,httprvletrequestrequest)throwxception{//stringfile="c:/urs/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.tcontenthandler(newxssfsheetxmlhandler(styles,sharedstringstable,messheethandler,fal));xssfreader.sheetiteratorsheets=(xssfreader.sheetiterator)xssfreader.getsheetsdata();//每一个sheetwhile(sheets.hasnext()){inputstreamsheetstream=sheets.next();inputsourcesheetsource=newinputsource(sheetstream);try{xmlreader.par(sheetsource秦岭淮河一线地理意义);logger.info("row:"+"结束");}finally{sheetstream.clo();}}}finally{pkg.clo();}returncommonresult.success(resultcode.success);}

总结:

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

本文发布于:2023-04-05 04:50:51,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/04e667eb74a59059f56d0db37e4ba8f8.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:poi读取excel数据(poi读取excel数字类型).doc

本文 PDF 下载地址:poi读取excel数据(poi读取excel数字类型).pdf

标签:数据   模式   操作   对象
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图