中企动力 > 商学院 > java读取大数据excel
  • ?

    原来Java大数据才是真正的高富帅!

    虫虫猪

    展开

    大数据时代,中国IT环境也将面临重新洗牌,不仅仅是企业,更是程序员们转型可遇而不可求的机遇。

    国内大多数大型互联网公司的程序员被称作研发工程师,但实际上国内几乎没有研发项目,只能叫做开发。开发程序员的工作大多是重复性劳动,容易产生疲惫感,薪资在工作2-5年内就达到了一个峰值,再要提升就比较困难,这样就导致了很多程序员最终转行做了其他行业。

    JAVA的精密,强大,拥有其它语言不可替代的性能和可维护性,早已经是成为最受欢迎的编程语言之一,很多人想进入IT行业,首选的第一门语言就是JAVA。但是,在未来10年肯定是大数据的天下,人工智能的爆发,将会有大量企业会进入大数据领域,而从JAVA程序员转JAVA大数据就会有天然的优势,因为目前大数据的架构基本都是用JAVA语言完成,未来10年,JAVA大数据的需求量会越来越大。

    现在学习JAVA的小伙伴,如果想以后不被淘汰,将来势必会进军大数据行列,根据目前的行业动态,JAVA程序员由于发展的局限性以及随着年龄增长,在竞争方面也越来越容易被年轻一代赶超,因为JAVA程序员的加班时间过长导致,所以大批JAVA工程师前辈已经先一步进军大数据了。下面我们来分析一下大数据在未来的优势:

    市场需求量大

    经常调查显示,去年有很多大小互联网公司都在布局大数据。而目前大数据方面的人才依旧十分紧缺,比如大数据生态Spark需要的Scala工程师。基于Java和Scala等技术密切的关系,有些大数据公司会瞄准JAVA工程师,通过培养转而成为大数据工程师。

    如果你先一步在学习JAVA的基础上再学习一些大数据的知识,那么将来你在公司的竞争力会明显大于一般的JAVA工程师,甚至可能提前一步进军大数据行列。

    就业方向广泛

    JAVA大数据的人才以后可以进行的工作有很多种,下面举几个例子:

    (1)大数据开发工程师

    基础大数据服务平台,大中型的商业应用包括我们常说的企业级应用(主要指复杂的大企业的软件系统)、各种类型的网站等。负责搭建大数据应用平台以及开发分析应用程序。

    (2)大数据分析师

    负责数据挖掘工作,运用Hive、Hbase等技术,专门对从事行业数据搜集、整理、分析,并依据数据做出行业研究、评估和预测的专业人员。以及通过使用新型数据可视化工具如Spotifre,Qlikview和Tableau,对数据进行数据可视化和数据呈现。

    (3)Android工程师

    Android是一种基于Linux的自由及开放源代码的操作系统,其源代码是Java。所以市场上见到的手机系统例如MIUI,阿里云,乐蛙等,都是修改源代码再发行的。Java做安卓不单单是指系统,还有APP对于更多的开发人员来说,他们更多的时间是花在开发APP上面。

    还有很多其它职位比如大数据挖掘等就不一一说明了。

    通过这篇文章我相信大家对JAVA大数据行业都有一点了解,在这个大家都呼吁的大数据时代,转型做JAVA大数据是一个非常好的选择,我相信即使几年以后大数据依旧是一个很好的领域。

    在美国,大数据工程师平均年薪达17.5万美元,在中国顶尖的互联网公司里,大数据工程师的薪酬也比同级别的其他职位高出30%以上。在未来若干年内大数据工程师都会是供不应求的状况,指望大学培养出合格的大数据人才有如天方夜谭,因此程序员们,你们的春天到了!

  • ?

    大数据学习之Java开发人员使用哪些大数据工具?(连载)

    妙之

    展开

    从最近的Java调查回顾,以确定哪些大型数据工具在Java开发人员中受欢迎。

    这里有一篇关于发布我最近跑的Java调查结果的一篇文章,其中我问开发人员在过去12个月中使用的工具/框架。响应者可以选择从预定义的选项列表中选择其他选项,并提供自己的选择。在这篇文章中,我们将介绍大数据工具。

    下边有一个工具列表包含了Java开发者常用工具:

    1. 语言:

    2. web框架

    3. 应用服务器

    4. SQL数据访问工具

    5. SQL数据库

    6. 大数据

    7. 构建工具

    8. 云提供商

    现在来看看大数据。根据维基百科,大数据是传统数据处理应用程序不足的数据集的广泛术语。

    在许多情况下,使用SQL数据库来存储/检索数据将会很好。在其他一些情况下,它不会缩放或者有更好的工具用于我们的目的。这一切都取决于用例。

    现在我们来讨论用于存储/处理数据的不同的非SQL工具 - NoSQL数据库,内存缓存,全文搜索引擎,实时流,图形数据库等。

    大数据 - 调查结果

    · MongoDB - 一个受欢迎的跨平台文档导向数据库。

    · Elasticsearch - 为云构建的分布式RESTful搜索引擎。

    · Cassandra - 最初在Facebook开发的开源分布式数据库管理系统,旨在处理大量商品服务器中的大量数据,提供高可用性,无单点故障。

    · Redis - 一个开源(BSD许可),内存数据结构存储,用作数据库,缓存和消息代理。

    · Hazelcast - 基于Java的开源内存数据网格。

    · EHCache - 广泛使用的开源Java分布式缓存,用于通用缓存,Java EE和轻量级容器。

    · Hadoop - 一个用Java编写的开源软件框架,用于从商品硬件构建的计算机集群上的分布式存储和分布式处理非常大的数据集。

    · Solr - 从Apache Lucene 项目开发的一个用Java编写的开源企业搜索平台 。

    · Spark - Apache Software Foundation中最活跃的项目,即开源集群计算框架。

    · Memcached - 通用分布式内存缓存系统。

    · Apache Hive - 在Hadoop之上提供类似SQL的层。

    · Apache Kafka - 最初在LinkedIn开发的高吞吐量,分布式,发布订阅消息系统。

    · Akka - 用于在JVM上构建高度并发,分布式和弹性的消息驱动应用程序的工具包和运行时。

    · HBase 是一种开源的非关系型分布式数据库,以Google的BigTable为模型,以Java编写并运行在HDFS之上。

    · Neo4j - Java中实现的开源图形数据库。

    · CouchBase - 一种开源的,分布式的面向交互式应用程序的NoSQL面向文档的数据库。

    · Apache Storm - 开源分布式实时计算系统。

    · CouchDB - 一种使用JSON存储数据的开源的面向文档的NoSQL数据库。

    · Oracle Coherence - 一种内存数据网格解决方案,使组织能够通过快速访问经常使用的数据来预测性地扩展任务关键型应用程序。

    · Titan - 可扩展的图形数据库,经过优化,用于存储和查询包含分布在多机器集群中的数百亿顶点和边缘的图形。

    · 亚马逊DynamoDB - 一个快速灵活的完全管理的NoSQL数据库服务,适用于所有需要一致,单位毫秒级延迟的应用程序。

    · 亚马逊Kinesis - 在AWS上实时流式传输数据的平台。

    · Datomic - 一个完全事务性,云就绪的分布式数据库,用Clojure编写。

    我们公司的一个java开发在学Hadoop,别人给了他一套视频,我看了看从基础入门、生态圈组件、商业项目讲解都挺详细的。需要视频的可以到鹏you圈留言,你可以通过TBanna521找到。

  • ?

    Java大数据:来看看你以后能做什么工作呢?

    托特尼斯

    展开

    当IT行业成为社会主流,Java技术以专业性和强大的规范性独受企业青睐。企业对合格的Java开发人员求贤若渴, 在各大主流招聘平台上, Java相关职位数量一直名列前茅。

    Java开发入门简单, 职业发展潜力大, 随着开发经验的积累, 薪资上升幅度显著,平均薪资12000+。你眼里苦逼的程序猿,或许薪水在你之上不知几倍。

    Java开发人才的需求量在不断增多,但是学习Java大数据开发只能做软件开发工程师吗?

    事实并不是这样,如在翡翠教育学习Java大数据课程,经过学习你可以轻松选择Java软件开发工程师、大数据工程师、Web开发工程师、数据库设计工程师、软件测试工程师等多个职位,或者从一个普通的程序员升级成中高端Java工程师,或者你还可以从事游戏开发,未来不是企业选你,而是你选企业,升职前景广阔。

    Java就业方向一:Java可以做网站

    Java可以用来编写网站,现在很多大型网站都用Jsp写的,JSP全名Java Server Pages它是一种动态网页技术,比如我们熟悉的163,一些政府网站都是采用JSP编写的。

    Java就业方向二、Java可以做游戏

    目前市面上流传的手机游戏大多数使用Java开发的,此外,在PC端,Java的功劳也不可忽视。最经典游戏《我的世界》(minecraft,简称MC)和当今世界最具人气和影响力的网络游戏之一《英雄联盟》(简称lol)都是使用Java开发的。

    Java就业方向三、Java可以做软件

    Java已成为当今市面上很受欢迎的编程软件,对于处于信息高速发达的今天,Java技术已经无处不在,手机软件、手机Java游戏、电脑软件等等。企业级应用开发,更是Java的天地,小到中小企业的应用解决方案,大到全国联网的系统,Java都占有极为重要的地位。

    翡翠教育Java大数据开发课程赋予学员独立完成商业级CRM项目的能力, 超越普通企业的用人要求,培养T型人才, 增强就业竞争力,扩宽学生职业发展道路,目前, JavaWeb程序员升级成大数据工程师,是非常流行且可行性很高的发展路径。

    如果你对IT感兴趣~

    如果你想成为IT技术大咖~

    如果你有梦想~

    如果你想拥抱成功~

    快来报名加入我们~

    翡翠教育的大舞台~

    任你挥洒努力的汗水~

    学好IT技术~

    翡翠教育成就美好人生!

    长按指纹

    一键报名

  • ?

    大数据的3大定律,让你从java小白到大数据工程师

    牧丹珍

    展开

    很多人都会觉得好,而且近几年大型互联网公司都在大力的推崇大数据开发,让我们提前的走进了大数据时代,代表性公司如:阿里、京东、腾讯让我们更加快速的了解了大数据 。同时很多人都开始转入大数据这个行列,却屡屡受挫是为什么了,大家看完这张图以后就会很清楚了

    为什么javase会成为大数据开发的基础了

    我们很多人都不知道大数据开大是有门槛的,大数据的门槛要高于其编程语言,尤其是对Java的语言依赖,没有javase的支撑那么就没有办法去完成Hadoop的搭建,所以这就是第一条拦路虎,所以很多想要转行业的多半都在这里被裆下,

    Hadoop的大数据的第一个必学基础

    大数据开发以后所会涉及的领域,让你无法想象

    小编温馨提示:大家对大数据storm感兴趣可以通过加大数据学习交流8群 640193172,进群备注:今日头条

    可以免费领取一份教学视频,要是觉得小编写的还行,请给一些鼓励,我会更加努力,希望大家可以转发和点评,小编在这里先谢过了

  • ?

    phpexcel导入excel处理大数据

    徐松

    展开

    phpexcel导入excel处理大数据

    先下载对应phpExcel 的包就行了https://github/PHPOffice/PHPExcel

    下载完成 把那个Classes 这个文件夹里面的 文件跟文件夹拿出来就好了。

    直接写到PHPExcel 这个文件里面的。调用很简单。引入phpExcel 这个类传递对应的excel 文件的路径就好了

    现在上传到指定的目录,然后加载上传的excel文件读取这里读取是的时候不转换数组了。注意:是Sheet可以多个读取,php上传值要设置大,上传超时要设置长。

  • ?

    给 Java 开发者的 9 个大数据工具和框架

    大海

    展开

    作为一个程序员,你一定要知道的几个平台

    1、MongoDB是一个基于分布式文件存储的数据库,使用C++语言编写。

    旨在为Web应用提供可扩展的高性能数据存储解决方案。应用性能高低依赖于数据库性能,MongoDB则是非关系数据库中功能最丰富,最像关系数据库的,随着MongDB3.4版本发布,其应用场景适用能力得到了进一步拓展。

    MongoDB的核心优势就是灵活的文档模型、高可用复制集、可扩展分片集群。你可以试着从几大方面了解MongoDB,如实时监控MongoDB工具、内存使用量和页面错误、连接数、数据库操作、复制集等。

    2、Elasticsearch ——为云构建的分布式RESTful搜索引擎

    ElasticSearch是基于Lucene的搜索服务器。它提供了分布式多用户能力的全文搜索引擎,基于RESTfulweb接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是比较流行的企业级搜索引擎。

    ElasticSearch不仅是一个全文本搜索引擎,还是一个分布式实时文档存储,其中每个field均是被索引的数据且可被搜索;也是一个带实时分析功能的分布式搜索引擎,并且能够扩展至数以百计的服务器存储及处理PB级的数据。ElasticSearch在底层利用Lucene完成其索引功能,因此其许多基本概念源于Lucene。

    3、Cassandra——开源分布式数据库管理系统

    最初是由Facebook开发的,旨在处理许多商品服务器上的大量数据,提供高可用性,没有单点故障。

    ApacheCassandra是一套开源分布式NoSQL数据库系统。集GoogleBigTable的数据模型与AmazonDynamo的完全分布式架构于一身。于2008开源,此后,由于Cassandra良好的可扩展性,被Digg、Twitter等Web2.0网站所采纳,成为了一种流行的分布式结构化数据存储方案。

    因Cassandra是用Java编写的,所以理论上在具有JDK6及以上版本的机器中都可以运行,官方测试的JDK还有OpenJDK及Sun的JDK。Cassandra的操作命令,类似于我们平时操作的关系数据库,对于熟悉MySQL的朋友来说,操作会很容易上手。

    4、Redis ——开源(BSD许可)内存数据结构存储

    用作数据库,缓存和消息代理。Redis是一个开源的使用ANSIC语言编写的、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

    Redis有三个主要使其有别于其它很多竞争对手的特点:Redis是完全在内存中保存数据的数据库,使用磁盘只是为了持久性目的;Redis相比许多键值数据存储系统有相对丰富的数据类型;Redis可以将数据复制到任意数

    5、Hazelcast ——基于Java的开源内存数据网格

    Hazelcast是一种内存数据网格in-memorydatagrid,提供Java程序员关键任务交易和万亿级内存应用。虽然Hazelcast没有所谓的“Master”,但是仍然有一个Leader节点(theoldestmember),这个概念与ZooKeeper中的Leader类似,但是实现原理却完全不同。

    同时,Hazelcast中的数据是分布式的,每一个member持有部分数据和相应的backup数据,这点也与ZooKeeper不同。

    Hazelcast的应用便捷性深受开发者喜欢,但如果要投入使用,还需要慎重考虑。

    6、EHCache——广泛使用的开源Java分布式缓存,主要面向通用缓存、Java EE和轻量级容器

    EhCache是一个纯Java的进程内缓存框架,具有快速、精干等特点,是hibernate中默认的CacheProvider。主要特性有:快速简单,具有多种缓存策略;缓存数据有两级,内存和磁盘,因此无需担心容量问题;缓存数据会在虚拟机重启的过程中写入磁盘;可以通过RMI、可插入API等方式进行分布式缓存;具有缓存和缓存管理器的侦听接口;支持多缓存管理器实例,以及一个实例的多个缓存区域;提供Hibernate的缓存实现。

    7、Hadoop ——用Java编写的开源软件框架

    用于分布式存储,并对非常大的数据用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群进行高速运算和存储。Hadoop实现了一个分布式文件系统(HadoopDistributedFileSystem),简称HDFS。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,MapReduce则为海量的数据提供了计算。

    8、Solr ——开源企业搜索平台,用Java编写,来自Apache Lucene项目

    Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过HttpGet操作提出查找请求,并得到XML格式的返回结果。

    与ElasticSearch一样,同样是基于Lucene,但它对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化。

    9、Spark ——Apache Software Foundation中最活跃的项目,是一个开源集群计算框架

    Spark是一种与Hadoop相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些不同之处使Spark在某些工作负载方面表现得更加优越,换句话说,Spark启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。

    Spark是在Scala语言中实现的,它将Scala用作其应用程序框架。与Hadoop不同,Spark和Scala能够紧密集成,其中的Scala可以像操作本地集合对象一样轻松地

    Memcached是一套分布式快取系统,当初是DangaInteractive为了LiveJournal所发展的,但被许多软件(如MediaWiki)所使用。Memcached作为高速运行的分布式缓存服务器,具有以下的特点:协议简单,基于libevent的事件处理,内置内存存储方式。

    本文来源: http://zrzy.etchf/?shzmt

  • ?

    处理Java大数据有什么技巧

    Peter

    展开

    Java在处理数据量比较大的时候,加载到内存必然会导致内存溢出,而在一些数据处理中我们不得不去处理海量数据,那Java是如何处理大数据的呢?有什么技巧吗?在做数据处理中,我们常见的手段是分解,压缩,并行,临时文件等方法。

    例如,我们要将数据库(不论是什么数据库)的数据导出到一个文件,一般是Excel或文本格式的CSV;对于Excel来讲,对于POI和JXL的接口,你很多时候没有办法去控制内存什么时候向磁盘写入,很恶心,而且这些API在内存构造的对象大小将比数据原有的大小要大很多倍数,所以你不得不去拆分Excel,还好,POI开始意识到这个问题,在3.8.4的版本后,开始提供cache的行数,提供了SXSSFWorkbook的接口,可以设置在内存中的行数,不过可惜的是,他当你超过这个行数,每添加一行,它就将相对行数前面的一行写入磁盘(如你设置2000行的话,当你写第20001行的时候,他会将第一行写入磁盘),其实这个时候他的临时文件,以至于不消耗内存,不过这样你会发现,刷磁盘的频率会非常高,我们的确不想这样,因为我们想让他达到一个范围一次性将数据刷入磁盘,比如一次刷1M之类的做法,可惜现在还没有这种API,很痛苦,我自己做过测试,通过写小的Excel比使用目前提供刷磁盘的API来写大文件,效率要高一些,而且这样如果访问的人稍微多一些磁盘IO可能会扛不住,因为IO资源是非常有限的,所以还是拆文件才是上策;而当我们写CSV,也就是文本类型的文件,我们很多时候是可以自己控制的,不过你不要用CSV自己提供的API,也是不太可控的,CSV本身就是文本文件,你按照文本格式写入即可被CSV识别出来;如何写入呢?下面来说说。。。

    在处理数据层面,如从数据库中读取数据,生成本地文件,写代码为了方便,我们未必要1M怎么来处理,这个交给底层的驱动程序去拆分,对于我们的程序来讲我们认为它是连续写即可;我们比如想将一个1000W数据的数据库表,导出到文件;此时,你要么进行分页,Oracle当然用三层包装即可,MySQL用limit,不过分页每次都会新的查询,而且随着翻页,会越来越慢,其实我们想拿到一个句柄,然后向下游动,编译一部分数据(如10000行)将写文件一次(写文件细节不多说了,这个是最基本的),需要注意的时候每次buffer的数据,在用outputstream写入的时候,最好flush一下,将缓冲区清空下。

    来设置游标的方式,以至于游标不是将数据直接cache到本地内存,然后通过设置statement.setFetchSize(200);设置游标每次遍历的大小;OK,这个其实我用过,oracle用了和没用没区别,因为oracle的jdbc API默认就是不会将数据cache到java的内存中的,而mysql里头设置根本无效,我上面说了一堆废话,呵呵,我只是想说,java提供的标准API也未必有效,很多时候要看厂商的实现机制,还有这个设置是很多网上说有效的,但是这纯属抄袭;对于oracle上面说了不用关心,他本身就不是cache到内存,所以java内存不会导致什么问题,如果是mysql,首先必须使用5以上的版本,然后在连接参数上加上useCursorFetch=true这个参数,至于游标大小可以通过连接参数上加上:defaultFetchSize=1000来设置,

    上次被这个问题纠结了很久(mysql的数据老导致程序内存膨胀,并行2个直接系统就宕了),还去看了很多源码才发现奇迹竟然在这里,最后经过mysql文档的确认,然后进行测试,并行多个,而且数据量都是500W以上的,都不会导致内存膨胀,GC一切正常,这个问题终于完结了。

    Java在处理大数据的时候还是有一些小技巧的,正确运用这些小技巧,有时候在处理问题时往往会事半功倍。

  • ?

    集算器协助java处理多样性数据源之Excel

    LAbbe

    展开

    Java程序员读取和计算excel的程序一般要使用poi或其它开源包,这些开源包对编程的支持较为底层,整体学习成本和操作复杂度都很高。使用集算器辅助java处理excel文件就可以避免这些事务。

    下面通过一个例子看一下具体作法:从Excel文件orders.xls中读取订单信息,找出2010年1月1日(含)之后,SELLERID等于18的订单。orders.xls的内容如下:

    实现的思路是:用Java程序调用集算器脚本,读取和计算excel文件中的数据,之后将结果以ResultSet的方式返回给Java程序。由于集算器支持动态表达式解析和求值,使得Java程序可以像使用sql那样,灵活的处理数据。

    首先,程序员可以将条件“2010年1月1日(含)之后,并且SELLERID等于18的订单。”作为参数where传递给esProc程序,如下图:

    where是个字串,其值为:ORDERDATE>=date(2010,1,1) && SELLERID==18。

    esProc的程序代码如下:

    A2:按照条件过滤。这里使用宏来实现动态解析表达式,其中的where就是传入参数。集算器将先计算${…}里的表达式,将计算结果作为宏字符串值替换${…}之后解释执行。这个例子中最终执行的是:=A1.select(ORDERDATE>=date(2010,1,1) && SELLERID==18)。A1:定义一个file对象,导入excel数据。esProc的集成开发环境可以直观的显示出导入的数据,如上图右边部分。importxls函数也可以读写xlsx文件,它会根据文件扩展名自动判断excel的版本。

    A3:将符合条件的结果集返回给java。如果需要将结果写入另外一个excel文件,只要将A3单元格改为:=file("D:/file/orders_result.xls").exportxls@t(A2)。

    过滤条件发生变化时不用改变程序,只需改变where参数即可。例如,条件变为:2010年1月1日(含)之后,并且SELLERID等于18的订单,或者CLIENT等于PWQ的订单。Where的参数值可以写为:CLIENT=="PWQ"||ORDERDATE>=date(2010,1,1) && SELLERID==18。执行之后,A2中的结果集如下图:

    在Java程序中使用esProc JDBC调用这段程序获得结果的代码如下:(将上述esProc程序保存为test.dfx):

    //建立esProc jdbc连接

    Class.forName("com.esproc.jdbc.InternalDriver");

    con= DriverManager.getConnection("jdbc:esproc:local://");

    //调用esProc程序(存储过程),其中test是dfx的文件名

    com.esproc.jdbc.InternalCStatementst =(com.esproc.jdbc.InternalCStatement)con.prepareCall("call test(?)");

    //设置参数

    st.setObject(1,"ORDERDATE>=date(2010,1,1) && SELLERID==18 || CLIENT==\"PWQ\"");//执行esProc存储过程

    ResultSet set =st.executeQuery();

    对于代码较简单的脚本,还可以把代码直接写在调用集算器JDBC的Java程序中,而不必专门编写脚本文件(test.dfx):

    ResultSet set = st.executeQuery(

    "=file(\"D:/file/orders.xls\").importxls@t().select(ORDERDATE>=date(2010,1,1) && SELLERID==18 || CLIENT==\"PWQ\")");

    这段Java代码直接调用了集算器的一句脚本:从Excel文件中取得数据,并按照指定的条件过滤。

  • ?

    一行代码完成Java的Excel读写

    纸谢

    展开

    前段时间在 github 上发现了阿里的 EasyExcel 项目,觉得挺不错的,就写了一个简单的方法封装,做到只用一个函数就完成 Excel 的导入或者导。刚好前段时间更新修复了一些 BUG,就把我的这个封装分享出来,请多多指教。

    附上源码:

    https://github/HowieYuan/easyexcel-method-encapsulation

    EasyExcel

    EasyExcel 的 github 地址:

    https://github/alibaba/easyexcel

    EasyExcel 的官方介绍:

    可以看到 EasyExcel 最大的特点就是使用内存少,当然现在它的功能还比较简单,能够面对的复杂场景比较少,不过基本的读写完全可以满足。

    一. 依赖

    首先是添加该项目的依赖,目前的版本是 1.0.2。

    com.alibabaeasyexcel1.0.2

    二. 需要的类

    1. ExcelUtil

    工具类,可以直接调用该工具类的方法完成 Excel 的读或者写。

    2. ExcelListener

    监听类,可以根据需要与自己的情况,自定义处理获取到的数据,我这里只是简单地把数据添加到一个 List 里面。

    publicclassExcelListenerextendsAnalysisEventListener {//自定义用于暂时存储data。//可以通过实例获取该值private List datas = new ArrayList<>();/** * 通过 AnalysisContext 对象还可以获取当前 sheet,当前行等数据 */ @Overridepublicvoidinvoke(Object object, AnalysisContext context) {//数据存储到list,供批量处理,或后续自己业务逻辑处理。 datas.add(object);//根据自己业务做处理 doSomething(object); }privatevoiddoSomething(Object object) { } @OverridepublicvoiddoAfterAllAnalysed(AnalysisContext context) { }public List getDatas() {return datas; }publicvoidsetDatas(List datas) {this.datas = datas; }}

    3. ExcelWriterFactroy

    用于导出多个 sheet 的 Excel,通过多次调用 write 方法写入多个 sheet。

    4. ExcelException

    捕获相关 Exception。

    三. 读取 Excel

    读取 Excel 时只需要调用 ExcelUtil.readExcel() 方法:

    @RequestMapping(value = "readExcel", method = RequestMethod.POST)public Object readExcel(MultipartFile excel) {return ExcelUtil.readExcel(excel, new ImportInfo());}

    其中 excel 是 MultipartFile 类型的文件对象,而 new ImportInfo() 是该 Excel 所映射的实体对象,需要继承 BaseRowModel 类,如:

    publicclass ImportInfo extends BaseRowModel {@ExcelProperty(index = 0)privateString name;@ExcelProperty(index = 1)privateString age;@ExcelProperty(index = 2)privateString email;publicString getName() {return name; }publicvoid setName(String name) {this.name = name; }publicString getAge() {return age; }publicvoid setAge(String age) {this.age = age; }publicString getEmail() {return email; }publicvoid setEmail(String email) {this.email = email; }}

    作为映射实体类,通过 @ExcelProperty 注解与 index 变量可以标注成员变量所映射的列,同时不可缺少 setter 方法。

    四. 导出 Excel

    1. 导出的 Excel 只拥有一个 sheet

    只需要调用 ExcelUtil.writeExcelWithSheets() 方法:

    @RequestMapping(value = "writeExcel", method = RequestMethod.GET)publicvoidwriteExcel(HttpServletResponse response) throws IOException { List list = getList(); String fileName = "一个 Excel 文件"; String sheetName = "第一个 sheet"; ExcelUtil.writeExcel(response, list, fileName, sheetName, new ExportInfo()); }

    fileName,sheetName 分别是导出文件的文件名和 sheet 名,new ExportInfo() 为导出数据的映射实体对象,list 为导出数据。

    对于映射实体类,可以根据需要通过 @ExcelProperty 注解自定义表头,当然同样需要继承 BaseRowModel 类,如:

    publicclass ExportInfo extends BaseRowModel {@ExcelProperty(value = "姓名" ,index = 0)privateString name;@ExcelProperty(value = "年龄",index = 1)privateString age;@ExcelProperty(value = "邮箱",index = 2)privateString email;@ExcelProperty(value = "地址",index = 3)privateString address;}

    value 为列名,index 为列的序号。

    如果需要复杂一点,可以实现如下图的效果:

    对应的实体类写法如下:

    publicclass MultiLineHeadExcelModel extends BaseRowModel {@ExcelProperty(value = {"表头1","表头1","表头31"},index = 0)privateString p1;@ExcelProperty(value = {"表头1","表头1","表头32"},index = 1)privateString p2;@ExcelProperty(value = {"表头3","表头3","表头3"},index = 2)private int p3;@ExcelProperty(value = {"表头4","表头4","表头4"},index = 3)private long p4;@ExcelProperty(value = {"表头5","表头51","表头52"},index = 4)privateString p5;@ExcelProperty(value = {"表头6","表头61","表头611"},index = 5)privateString p6;@ExcelProperty(value = {"表头6","表头61","表头612"},index = 6)privateString p7;@ExcelProperty(value = {"表头6","表头62","表头621"},index = 7)privateString p8;@ExcelProperty(value = {"表头6","表头62","表头622"},index = 8)privateString p9;}

    2. 导出的 Excel 拥有多个 sheet

    调用 ExcelUtil.writeExcelWithSheets() 处理第一个 sheet,之后调用 write() 方法依次处理之后的 sheet,最后使用 finish() 方法结束。

    publicvoidwriteExcelWithSheets(HttpServletResponse response) throws IOException { List list = getList(); String fileName = "一个 Excel 文件"; String sheetName1 = "第一个 sheet"; String sheetName2 = "第二个 sheet"; String sheetName3 = "第三个 sheet"; ExcelUtil.writeExcelWithSheets(response, list, fileName, sheetName1, new ExportInfo()) .write(list, sheetName2, new ExportInfo()) .write(list, sheetName3, new ExportInfo()) .finish();}

    write 方法的参数为当前 sheet 的 list 数据,当前 sheet 名以及对应的映射类。

    扩展阅读

    代码整洁之道|最佳实践小结

    Javascript 将 HTML 页面生成 PDF 并下载

    Java POI 导出EXCEL经典实现 Java导出Excel弹出下载框

    来源:https://juejin.im/post/5ba320546fb9a05d0b14304b

    文章来源网络,版权归作者本人所有,如侵犯到原作者权益,请与我们联系删除

  • ?

    整理关于java读取excel内容的例子供大家参考

    尔冬

    展开

    1POI简介

    Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。

    2POI下载

    poi下载地址:https://apache.org/dyn/closer.lua/poi/release/bin/poi-bin-3.17-20170915.tar.gz

    下载之后把压缩包解压,然后在项目里面引用解压文件夹里面的jar

    3新建java project,引入poi相关的jar

    4创建一个java类,编写代码

    package test;

    import java.io.File;

    import java.io.FileInputStream;

    import java.io.InputStream;

    import org.apache.poi.hssf.usermodel.HSSFRow;

    import org.apache.poi.hssf.usermodel.HSSFSheet;

    import org.apache.poi.hssf.usermodel.HSSFWorkbook;

    public class ReadExcel {

    /**

    * @param args

    */

    @SuppressWarnings("resource")

    public static void main(String[] args) {

    try {

    InputStream is = new FileInputStream(new File(

    "D:/360bizhi/0_TITLE_CODE.xls"));

    HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);

    // 获取每一个工作薄

    for (int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++) {

    HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);

    if (hssfSheet == null) {

    continue;

    }

    // 获取当前工作薄的每一行

    for (int rowNum = 0; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {

    HSSFRow hssfRow = hssfSheet.getRow(rowNum);

    if (hssfRow != null) {

    String title_id = String.valueOf(hssfRow.getCell(0));

    // 读取第一列数据

    String title_name = String.valueOf(hssfRow.getCell(1));

    // 读取第二列数据

    String title_name_en = String.valueOf(hssfRow

    .getCell(2));

    System.out.println("===============title_id:"

    + title_id + ",title_name:" + title_name

    + ",title_name_en:" + title_name_en);

    } catch (Exception e) {

    e.printStackTrace();

    5运行main进行测试,查看打印结果

    打印结果和xls里面的值是一样的,说明读取excel成功

    请大家多多关注我的头条号,谢谢大家

  • java读取大数据excel