- ?
Excel表格实用技巧13、快速计算数据总值及数据平均值的两种方式
Hanko
展开
利用函数求和、计算平均值
操作示例
方式一
1、计算下表中总销售额,定位到需要显示总额的单元格,点击开始菜单中的【自动求和】,或点击【自动求和】后面倒三角下拉选择——【求和】,会自动选中上方所有数字,按回车键后,总业绩已计算出来;
2、上图中,显示总销售的单元格刚好和销售业绩在同一列,如果不再同一列,我们可以在点击【求和】菜单,显示区域虚线后,单击第一个数据单元格,拖动选中所有数据,然后回车即可;
3、同理,平均值只需选中【平均值】菜单即可。
方式二
1、【自动求和】菜单下拉,选中【其他函数】,依次选择【常用函数】——【SUM】函数;
2、确定后弹出参数窗口,拖动选择数据区域,确定,求和完成;
3、同理,平均值只需在常用函数中选择【AVERAGE】函数即可。
- ?
作为数据分析师,用的最多的竟是Excel表格
萨克斯克宾
展开
【摘要】:结合实际数据分析工作,简要介绍了VLOOKUP函数的基础应用,重点介绍亲测高效有难度的VLOOKUP函数高级应用。最后分享我运用Excel的一点技巧。
毕业后,第一份工作是在一家互联网公司做数据分析。
尽管和所学专业没那么匹配,但我还是挺满意。因为向来对数字很敏感,对常用统计软件也都有所了解。
正式入职,发现面试时说的什么SPSS,Eviews统统都不用,基本就是用Excel。对于研究生毕业,第一份工作,我多少有些落差。既来之则安之,我心想用什么工具最方便,工作中应该可以自己选择。对于word和ppt还算熟练,Excel也就一般。多学点总不会差。
开始工作,我发现Excel的功能简直太强大,我之前了解的仅是皮毛。尤其在更新到2013版后,操作更智能和快捷,数据量大时计算较费时。对于日常工作影响倒不大,借助Excel我的数据分析工作也很快上手。
除了宏不太会,工作之余也会多琢磨一些公式和操作。以至于同办公室的同事,甚至外部门的同事都来找我帮忙解决Excel的问题。时间久了,领导特意让我在部门内部定期做教学分享。
我确实喜欢和数据打交道的感觉,从冗杂的繁琐数据中分析出最终的结果相当有成就感。在简书上也看到了许多实用的Excel操作指南或技巧。
今天分享一个职场中最常用,功能强大,却少有人掌握的VLOOKUP函数。很多文章都提到过这个函数的基础应用,此外还有一个高级应用,是我在工作中遇到,亲测高效快捷的有力工具。
VLOOKUP函数---最最最常用的查找函数
四个必备参数=(要查找的值,要查找的区域,返回数据在查找区域的第几列数,逻辑值)
注: FALSE或0,则返回精确匹配,如果找不到,则返回错误值 #N/A(首选)
TRUE或1,则返回近似匹配值,如果找不到,则返回小于第一个参数的最大值。
VLOOKUP函数的基础应用:一对一的匹配
理解上述文字很晦涩,用实例来说明。
例1: 下图中左表为源数据:各类产品在三个城市的日销售数据。
需求:查询产品B和F在上海的销售额。
因为提供的数据量很少,人工查找就能完成。但实际工作中数据量很庞大,人工查找费时费力且准确率低。这时用VLOOKUP一秒搞定。
做法:在G2单元格内,输入公式,见红框内。回车后,出现结果;将公式复制或下拉至G3,同理可得结果。
参数解释:
(1)“F2”为我们要查找的参照值,即在源数据第一列查找“产品B”。当公式下拉复制时,自动切换为查找F3。
(2)“A:C”指我们要在此范围内查找数据。该参数也可写为“$A$2:$C$9”,即绝对引用。这样可保证无论公式如何拖拽复制,数据源始终固定引用该区域。
(3)参数“3”指在选择的数据源“A列-C列”范围内,要查询的销量在引用的第三列,即C列。
(4)FALSE,即精确查找。
这样,通过应用该函数,实现了产品型号和销量一对一的匹配查找。
应用该公式的硬性条件:
(1)必须保证需要查找的参照值与源数据格式一致。
即例1中:F列与A列完全一致,不仅内容相同,尤其保证单元格格式一致,否则只会返回错误值 #N/A。如不一致,查找前需转换成一致的格式。有时较难分辨。
(2)必须保证源数据表中的第一列没有重复项。
即A列中没有出现重复的产品类型。假如源数据中出现了多行“产品B”,那么在查找时只能返回第一次“产品B”出现时对应的销量。
当(2)无法满足时,查找不再是一对一,而是一对多的匹配。需要对VLOOKUP函数进行扩展才得以实现查找功能。
VLOOKUP函数的高级应用:一对多的匹配
例2:下图左表为客服中心的每日工作记录,日积月累,这个表数据量庞大且信息冗杂。
需求:王丹和张鹏岗位变动,需将他们接待过的全部客户汇总转交其他同事维护。
数据量小手动筛选即可,使用透视表也可完成。这里我借助简单的例子,介绍如何使用VLOOKUP完成。当数据量庞大,这是较便利的方法。
做法:
第一步:将A列排序,在A与B列间新插入两列。
第二步:计数。在B2输入公式=COUNTIF(A$2:A2,A2),回车,下拉即可。
目的是对A列中同一个名字的出现次数进行计算。如图李珊出现了四次。
第三步:构建辅助列。在C2输入公式=A2&B2,回车,下拉即可。目的在于将A列B列的内容合并。这时C列即为辅助列。保证了源数据的唯一性,此时已满足VLOOKUP基础应用的第二个硬性条件。
第四步:进行匹配查找。在H2输入公式=VLOOKUP($G2&H$1,$C$2:$D$18,2,FALSE), 复制公式至其他单元格即可得到结果。
与基础应用相比,仅参数1有变化,涉及相对引用和绝对引用问题。
参数1:将“客服姓名&序号“合并作为第一个参数。公式向右向下复制后,“客服姓名”行变列不变,所以锁定列。“序号”列变行不变,所以锁定行。即为:“$G2&H$1”。锁定即绝对引用。(此处较难理解,操作中通过尝试能够理解透)
参数2:绝对引用C2至D18区域。即为:“$C$2:$D$18”,新数据源。
参数3:返回所选区域C2至D18中的第2列数据。即为:客户姓名
参数4:FALSE,即精确查找。
第五步:将H2中的公式向下向右复制至K3,即得全部结果。可对比源数据表验证是否正确。
在序号为4的单元格内出现了#N/A值。表明没有找到“王丹4”和“张鹏4”对应的内容,说明这两人接待的客户仅有3人。
这样,通过其他功能辅助,实现了客服与客户一对多的匹配查找。
总结:VLOOKUP的高级应用是在基础应用的基础上,借助了COUNTIF和&函数,构建辅助列,使得源数据表中第一列无重复。四个必备参数中仅参数1涉及绝对引用和相对引用,略有难度。
应用Excel的技巧
1.填充了公式的单元格,在得到结果后,最好将计算结果转换为“值”。
两个好处:一是避免源数据的任何变动再次影响公式的计算结果;二是Excel本身计算较费时。如公式一直存在,每次打开该文件,或是刷新时都会重新计算,严重影响Excel运算速度。
2.Excel的数据承载量相对较小。2013版每个sheet能够填充接近105万行。
如果涉及较多sheet,数据量可想而知。因此在上一条的基础上,必须及时保存,否则数据量大时Excel难免会出现重启。毕竟多数人用的都是免费版,为了避免做无用功,及时保存很重要。这可是次次抓狂的经验教训。
3.Excel的功能很丰富,没有哪一本书或是哪一个老师能够完全教会所有功能。
更实际的是,从点到面去学习。比如说我介绍了VLOOKUP函数的应用,其中涉及到了绝对引用的概念,以及countif函数的应用,这时就引导你去学习新知识。
任何功能的组合都能起到耳目一新的作用。
4.Excel做不到死记硬背,多练习才利于掌握。
比如说,在工作中我给同事教过无数次VLOOKUP函数的应用,当时似懂非懂,勉强会用。想不到的是他们下一次遇到早已忘得一干二净。在我看来是很简单的一个公式而已,仅需掌握四个参数。关键是他们不常用,而我几乎天天用。
任何技能都是如此。孰能生巧,才能更快掌握更多功能。哪怕是多记几个快捷键,都会为你使用Excel加分不少。
多学一点技能,就能少求助别人,且让别人来求助于你。普通离优秀,永远差一项技能。
写出来为分享,也为记录。
PS:如果没有看懂,或是觉得现在用不到我介绍的公式。没关系,请收藏,因为工作后,无论做什么工作一定一定一定会用到VLOOKUP。
请尊重原创的辛苦。欢迎分享,欢迎交流。
- ?
JavaEE——Java导出Excel表
叹清寒
展开
声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。
Java导出Excel表
首先去maven里面下载 upload 1.3.3 版本 下载到你的maven工程里面
上传文件必须是post方法
上传文件同时有表单值的话 你用request.getParame是获得不到的
Java导出Excel表
去maven工厂下载 POI jar包
- ?
怎么样Excel做数据分析?这几个步骤帮到你
文虎
展开
每个人都会有机会进行数据展示,为什么别人展示永远获得正视,而我的展示永远只有自己愿意去看,别人在看手机?那怎样做数据图表分析呢请看以下步骤:
如何对表格进行修饰,本次小编带来两个技巧,一是使用“套用表格格式”,和使用“条件格式”。二是带领大家学会养成修饰表格的思维。
第一步是对表格进行粗略的修饰调整,思维:行高、列宽、对齐方式、表格线等;
使用“套用表格格式”、“条件格式”之后看数据不再枯燥无味,而且还更有看头。“条件格式”可以将筛选条件转换为颜色可视化,从而达到一目了然的效果。
第一个技巧,①“套用表格格式”。方法:任一单元格→开始→套用表格格式。
②“条件格式”,方法:选中单元格区域→开始→条件格式。
条件1:高于平均值
条件2:数据条
条件3:色阶
第二个技巧:养成修饰图表的思维。这次举例柱形图的修饰例子,其他希望大家动用类似的方法进行模拟实践。
步骤一:根据销售数据建立柱状图,建立方法可参考。选择数据源→插入→柱状图→选择数据源→编辑坐标
步骤二:添加辅助线。选择数据源→→添加→点击柱体右键,设置数据系列格式→次坐标轴→选中柱体,右键更改图表类型→折线图。
希望回答对你能有所帮助,如果觉得不错就来点个赞或关注吧,感谢各位了!
- ?
Excel到底有多厉害?小白才用来做数据管理…
Liao
展开
Excel就像一把天山寒铁淬炼而成的杀猪刀,本身已经很厉害,但具体有多厉害取决于用它的人。
Excel最牛逼的地方在于它不是小李飞刀也不是轩辕剑——需要练个10年8年才能用,它只是一把菜刀,老百姓可以用来切菜,高手可以用来刮胡子,绝世高手拿着直接从南天门一直砍刀蓬莱东路。
表格是什么?表格就是数据容器,对于非IT人士来说,这辈子可能都不会用数据库,但是!Excel让每个人都可以管理数据库了!其提供的基本功能足以完成大部分数据管理统计工作。
打个比方,同事拿到全国资料开始挨个数每个省有多少个客户数了半个小时,而你只是点了两下鼠标就完成了工作。没错,在同事眼里你就是那个百年难得一见的练武奇才(以后就可以承担更多工作了,可喜可贺)!
要你命2000:数据处理(函数)
别人向你扔屎,你可以躲。客户扔给你屎,你只能接住!比如这种屎:
这种乱七八糟表格是没有任何数据意义的,如果只有三坨,动手处理一下就好了,如果有100坨,怎么办?不要紧张,我们只需要处理一行,其余99行交给excel即可。。。
首先,数据-分列:
然后,直接查找替换,将没用的天字去掉:
最后这个毛比较难以处理,动用函数:先找出具体数字,如果里面有“毛”字,直接将结果乘以0.1,一个规范的表格就诞生了:
(如无特殊需要,最后带汉字的D列可以用E列覆盖掉)
Excel也可以为自己所用,再来举一个例子:
时间管理。与一般时间管理App不同,因为我们可以自己设计研发,做出最适合自己的版本!Go!
首先写两行:
拖动一下右下角的小圆点:
同理增加横轴:
填写数据,编写公式。这样计算当天任务量:
=COUNTA(B2:P2)
这样计算完成量
这样计算完成度
=Q3/Q2
最后完成度那里设置单元格格式-数字-百分比。最后填写数据。最终效果图(点击看大图):
只要三个函数,每天的工作生活一览无遗!
P.s还可以拓展一些功能,比如当天完成度到达xx就有奖励/惩罚之类
总结:掌握了函数,只要是和数据相关的工作,就可以考虑用Excel来处理。
要你命3000:控制一切
著名篮球员赤木刚宪曾经说过,掌握代码就等于掌握了整个Excel,此言非虚。Excel自带编程功能,只有想不到,没有做不到!接下来就用解决吃饭问题做一个简单例子展示一下:
对于有选择困难症的人,让上天来决定吃啥是最好了,我们先填一点数据,如图:
然后选择开发工具-VisualBasic(为了做例子专门下了一个office365,我也是拼了= =),然后什么都不管,直接粘贴代码:
Dim a As Integer '定义公共变量Sub随机Dim x As IntegerDim y As Integera = 0Randomize '初始化reselect:x = Rnd * (3 - 1) + 1 '生成2至7的随机数,代表列数y = Rnd * (4 - 1) + 1 '生成2至6的随机数,代表行数Range("a1:d3").Interior.ColorIndex = xlNone '去掉填充色Cells(x, y).Interior.ColorIndex = 3 '填充为红色a = a + 1If a = 300 Then Exit SubGoTo reselectEnd Sub
然后保存回到excel,选择开发工具-插入-表单-按钮,画一个按钮在excel上,命名为“吃啥好”
在按钮上点右键,指定宏,选择我们刚才做的函数,然后点确定:
Excel制作的半即时战斗模拟(原文地址Excel潜能系列——Excel游戏(2v2战斗~5v5战斗模拟器)【更新V1.5】 Einsphoton_Einsphoton_新浪博客)
超牛的EXCEL版《超级玛丽》总结:掌握了代码,理论上可以用它来做任何小型项目!
用来做动画:
[Excel]Bad Apple!!
推荐书籍:
你早该这么玩Excel(数据管理、工作用)
Excel2013高级VBA编程宝典(装逼、开发用)
另外光有技巧是不够的,表格美化也很重要。(做人也一样,牛逼不够,还得帅。。。)
- ?
Java实现文件批量导入导出实例(兼容xls,xlsx)
Jason
展开
1、介绍
java实现文件的导入导出数据库,目前在大部分系统中是比较常见的功能了,今天写个小demo来理解其原理,没接触过的同学也可以看看参考下。
目前我所接触过的导入导出技术主要有POI和iReport,poi主要作为一些数据批量导入数据库,iReport做报表导出。另外还有jxl类似poi的方式,不过貌似很久没跟新了,2007之后的office好像也不支持,这里就不说了。
2、POI使用详解
2.1 什么是Apache POI?
Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。
2.2 POI的jar包导入
本次讲解使用maven工程,jar包版本使用poi-3.14和poi-ooxml-3.14。目前最新的版本是3.16。因为3.15以后相关api有更新,部分操作可能不一样,大家注意下。
2.3 POI的API讲解
2.3.1 结构
HSSF - 提供读写Microsoft Excel格式档案的功能。XSSF - 提供读写Microsoft Excel OOXML格式档案的功能。HWPF - 提供读写Microsoft Word格式档案的功能。HSLF - 提供读写Microsoft PowerPoint格式档案的功能。HDGF - 提供读写Microsoft Visio格式档案的功能。
2.3.2 对象
本文主要介绍HSSF和XSSF两种组件,简单的讲HSSF用来操作Office 2007版本前excel.xls文件,XSSF用来操作Office 2007版本后的excel.xlsx文件,注意二者的后缀是不一样的。
HSSF在org.apache.poi.hssf.usermodel包中。它实现了Workbook 接口,用于Excel文件中的.xls格式
常用组件:HSSFWorkbook excel的文档对象HSSFSheet excel的表单HSSFRow excel的行HSSFCell excel的格子单元HSSFFont excel字体HSSFDataFormat 日期格式HSSFHeader sheet头HSSFFooter sheet尾(只有打印的时候才能看到效果)样式:HSSFCellStyle cell样式辅助操作包括:HSSFDateUtil 日期HSSFPrintSetup 打印HSSFErrorConstants 错误信息表
XSSF在org.apache.xssf.usemodel包,并实现Workbook接口,用于Excel文件中的.xlsx格式
常用组件:XSSFWorkbook excel的文档对象XSSFSheet excel的表单XSSFRow excel的行XSSFCell excel的格子单元XSSFFont excel字体XSSFDataFormat 日期格式和HSSF类似;
2.3.3 两个组件共同的字段类型描述
其实两个组件就是针对excel的两种格式,大部分的操作都是相同的。
2.3.4 操作步骤
以HSSF为例,XSSF操作相同。
首先,理解一下一个Excel的文件的组织形式,一个Excel文件对应于一个workbook(HSSFWorkbook),一个workbook可以有多个sheet(HSSFSheet)组成,一个sheet是由多个row(HSSFRow)组成,一个row是由多个cell(HSSFCell)组成。
3、代码操作
3.1 效果图
惯例,贴代码前先看效果图
Excel文件两种格式各一个:
代码结构:
导入后:(我导入了两遍,没做校验)
导出效果:
3.2 代码详解
这里我以Spring+SpringMVC+Mybatis为基础
Controller:
Service
3.3 导出文件api补充
大家可以看到上面service的代码只是最基本的导出。
在实际应用中导出的Excel文件往往需要阅读和打印的,这就需要对输出的Excel文档进行排版和样式的设置,主要操作有合并单元格、设置单元格样式、设置字体样式等。
3.3.1 单元格合并
使用HSSFSheet的addMergedRegion()方法
参数CellRangeAddress 表示合并的区域,构造方法如下:依次表示起始行,截至行,起始列, 截至列
3.3.2 设置单元格的行高和列宽
3.3.3 设置单元格样式
1、创建HSSFCellStyle
2、设置样式
3、将样式应用于单元格
3.3.4设置字体样式
1、创建HSSFFont对象(调用HSSFWorkbook 的createFont方法)
2、设置字体各种样式
3、将字体设置到单元格样式
大家可以看出用poi导出文件还是比较麻烦的,等下次在为大家介绍下irport的方法。
导出的api基本上就是这些,最后也希望上文对大家能有所帮助。
学习Java的同学注意了!!!学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群495273252,我们一起学Java!
- ?
Java使用Apache POI导出Excel
Neil
展开
一.POI简单介绍
Apache POI 是用Java 编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对 Microsoft Office 格式档案读和写的功能
HSSF 提供读写Microsoft Excel XLS格式档案的功能。
XSSF 提供读写Microsoft Excel OOXML XLSX格式档案的功能。
HWPF 提供读写Microsoft Word DOC格式档案的功能。
HSLF 提供读写Microsoft PowerPoint格式档案的功能。
HDGF 提供读Microsoft Visio格式档案的功能。
HPBF 提供读Microsoft Publisher格式档案的功能。
HSMF 提供读Microsoft Outlook格式档案的功能。
二.操作步骤
1.环境配置:导入jar包
org.apache.poi poi 3.16
2.创建一个Excel工作簿
@Test public void test() throws IOException { //定义一个工作蒲 Workbook wb = new HSSFWorkbook(); //定义一个输出流 FileOutputStream fileOutputStream = new FileOutputStream("/home/ubuntu/Desktop/Excel工作蒲.xls"); //写入在输出流 wb.write(fileOutputStream); //关闭输出流 fileOutputStream.close(); }
3.创建一个sheet页
@Test public void sheet() throws IOException { //定义一个工作蒲 Workbook wb = new HSSFWorkbook(); //创建sheet页面 wb.createSheet("第一个sheet页"); wb.createSheet("第二个sheet页"); //定义一个输出流 FileOutputStream fileOutputStream = new FileOutputStream("/home/ubuntu/Desktop/Excel工作蒲带有sheet页.xls"); //写入在输出流 wb.write(fileOutputStream); //关闭输出流 fileOutputStream.close(); }
sheet页
4.创建行和列
@Test public void row() throws IOException { //定义一个工作蒲 Workbook wb = new HSSFWorkbook(); //创建sheet页面 Sheet sheet = wb.createSheet("学生信息sheet页"); //创建一行 Row row = sheet.createRow(0); //创建一个单元格 Cell cell =null; for(int i = 0 ;i<5;i++){ row.createCell(i).setCellValue("写入信息:单元格内容"+i); } //定义一个输出流 FileOutputStream fileOutputStream = new FileOutputStream("/home/ubuntu/Desktop/Excel学生信息.xls"); //写入在输出流 wb.write(fileOutputStream); //关闭输出流 fileOutputStream.close(); }
5.创建一个时间样式到Excel
@Test public void date() throws IOException { //定义一个工作蒲 Workbook wb = new HSSFWorkbook(); //创建sheet页面 Sheet sheet = wb.createSheet("时间sheet页"); //创建一行 Row row = sheet.createRow(0); //创建一个单元格 Cell cell = row.createCell(0); cell.setCellValue(new Date()); CreationHelper creationHelper = wb.getCreationHelper(); //设置单元格样式 CellStyle cellStyle = wb.createCellStyle(); cellStyle.setDataFormat(creationHelper.createDataFormat().getFormat("YYYY-MM-DD hh:mm:ss")); cell = row.createCell(1); cell.setCellValue(new Date()); //设置日期样式 cell.setCellStyle(cellStyle); //定义一个输出流 FileOutputStream fileOutputStream = new FileOutputStream("/home/ubuntu/Desktop/Excel日期格式.xls"); //写入在输出流 wb.write(fileOutputStream); //关闭输出流 fileOutputStream.close(); }
6.单元格对其方式及行高
@Test public void style() throws IOException { //定义一个工作蒲 Workbook wb = new HSSFWorkbook(); //创建sheet页面 Sheet sheet = wb.createSheet("第一个sheet"); //创建一行 Row row = sheet.createRow(0); //设置行高 row.setHeightInPoints(30); //创建一个单元格 createCell(wb,row,(short)0,HSSFCellStyle.ALIGN_CENTER,HSSFCellStyle.VERTICAL_BOTTOM); createCell(wb,row,(short)1,HSSFCellStyle.ALIGN_JUSTIFY,HSSFCellStyle.VERTICAL_CENTER); createCell(wb,row,(short)2,HSSFCellStyle.ALIGN_CENTER_SELECTION,HSSFCellStyle.VERTICAL_JUSTIFY); //定义一个输出流 FileOutputStream fileOutputStream = new FileOutputStream("/home/ubuntu/Desktop/Excel样式.xls"); //写入在输出流 wb.write(fileOutputStream); //关闭输出流 fileOutputStream.close(); } /** * 创建一个单元格设置对应的对其方式 * @param workbook 工作蒲 * @param row 行 * @param column 列 */ private static void createCell(Workbook workbook, Row row, short column,short halign,short valign){ Cell cell = row.createCell(column);//创建单元格 cell.setCellValue(new HSSFRichTextString("我是富文本"));//设置值 CellStyle cellStyle = workbook.createCellStyle();//创建样式 cellStyle.setAlignment(halign);//设置单元格水平方向对其方式 cellStyle.setVerticalAlignment(valign);//设置单元格垂直方向对其方式 cell.setCellStyle(cellStyle); }
合并单元格
@Test public void test1() throws IOException { //定义一个工作蒲 Workbook wb = new HSSFWorkbook(); //创建sheet页面 Sheet sheet = wb.createSheet("第一个sheet"); //创建一行 Row row = sheet.createRow(1); //设置行高 row.setHeightInPoints(30); //创建一个单元格 Cell cell = row.createCell(1); cell.setCellValue("合并单元格"); //合并单元格(起始行,结束行,起始列,结束列) sheet.addMergedRegion(new CellRangeAddress(1,2,1,2)); //定义一个输出流 FileOutputStream fileOutputStream = new FileOutputStream("/home/ubuntu/Desktop/Excel样式.xls"); //写入在输出流 wb.write(fileOutputStream); //关闭输出流 fileOutputStream.close(); }
- ?
集算器协助java处理多样性数据源之Excel
齐寄琴
展开
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读写
Darnell
展开
前段时间在 github 上发现了阿里的 EasyExcel 项目,觉得挺不错的,就写了一个简单的方法封装,做到只用一个函数就完成 Excel 的导入或者导。刚好前段时间更新修复了一些 BUG,就把我的这个封装分享出来,请多多指教。
附上源码:
https://github/HowieYuan/easyexcel-method-encapsulation
EasyExcel
EasyExcel 的 github 地址:
https://github/alibaba/easyexcel
EasyExcel 的官方介绍:
可以看到 EasyExcel 最大的特点就是使用内存少,当然现在它的功能还比较简单,能够面对的复杂场景比较少,不过基本的读写完全可以满足。
一. 依赖
首先是添加该项目的依赖,目前的版本是 1.0.2。
com.alibaba easyexcel 1.0.2 二. 需要的类
1. ExcelUtil
工具类,可以直接调用该工具类的方法完成 Excel 的读或者写。
2. ExcelListener
监听类,可以根据需要与自己的情况,自定义处理获取到的数据,我这里只是简单地把数据添加到一个 List 里面。
publicclassExcelListenerextendsAnalysisEventListener {//自定义用于暂时存储data。//可以通过实例获取该值private List
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 jar简介
Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。
2POI jar下载
poi下载地址:https://apache.org/dyn/closer.lua/poi/release/bin/poi-bin-3.17-20170915.tar.gz
下载之后把压缩包解压,然后在项目里面引用解压文件夹里面的jar
3新建ReadExcelTest java project,引入poi相关jar
4创建一个WriteExcel java类,编写代码,写入excel里面
package test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class WriteExcel {
private static final String EXCEL_XLS = "xls";
private static final String EXCEL_XLSX = "xlsx";
@SuppressWarnings("rawtypes")
public static void writeExcel(List
String finalXlsxPath) {
OutputStream out = null;
try {
// 获取总列数
int columnNumCount = cloumnCount;
// 读取Excel文档
File finalXlsxFile = new File(finalXlsxPath);
Workbook workBook = getWorkbok(finalXlsxFile);
// sheet 对应一个工作页
Sheet sheet = workBook.getSheetAt(0);
/**
* 删除原有数据,除了属性列
*/
int rowNumber = sheet.getLastRowNum(); // 第一行从0开始算
System.out.println("原始数据总行数,除属性列:" + rowNumber);
for (int i = 1; i <= rowNumber; i++) {
Row row = sheet.getRow(i);
sheet.removeRow(row);
}
// 创建文件输出流,输出电子表格:这个必须有,否则你在sheet上做的任何操作都不会有效
out = new FileOutputStream(finalXlsxPath);
workBook.write(out);
* 往Excel中写新数据
for (int j = 0; j < dataList.size(); j++) {
// 创建一行:从第二行开始,跳过属性列
Row row = sheet.createRow(j + 1);
// 得到要插入的每一条记录
Map dataMap = dataList.get(j);
String name = dataMap.get("title_id").toString();
String address = dataMap.get("title_name").toString();
String phone = dataMap.get("title_name_en").toString();
for (int k = 0; k <= columnNumCount; k++) {
// 在一行内循环
Cell first = row.createCell(0);
first.setCellValue(name);
Cell second = row.createCell(1);
second.setCellValue(address);
Cell third = row.createCell(2);
third.setCellValue(phone);
// 创建文件输出流,准备输出电子表格:这个必须有,否则你在sheet上做的任何操作都不会有效
} catch (Exception e) {
e.printStackTrace();
} finally {
if (out != null) {
out.flush();
out.close();
} catch (IOException e) {
System.out.println("数据汇入成功");
* 判断Excel的版本,获取Workbook
*
* @param in
* @param filename
* @return
* @throws IOException
public static Workbook getWorkbok(File file) throws IOException {
Workbook wb = null;
FileInputStream in = new FileInputStream(file);
if (file.getName().endsWith(EXCEL_XLS)) { // Excel 2003
wb = new HSSFWorkbook(in);
} else if (file.getName().endsWith(EXCEL_XLSX)) { // Excel 2007/2010
wb = new XSSFWorkbook(in);
return wb;
* @param args
public static void main(String[] args) {
List
for(int k=0; k<100;k++){
Map
map = new HashMap (); map.put("title_id", "title_id"+k);
map.put("title_name", "title_name"+k);
map.put("title_name_en", "title_name_en"+k);
mapList.add(map);
writeExcel(mapList, mapList.size(), "D:/360bizhi/readExcel.xlsx");
5运行main进行测试,查看写入结果
写入结果和预期是一样的,说明写入成功
请大家多多关注我的头条号,谢谢大家
java写数据到excel
-
1、只需3秒快速实现求和
-
2、如何快速填充序号
-
3、如何自动填充序号(公式法)
-
4、数据条的神奇应用
-
5、多文本快速合并
-
6、查找与替换的不同玩法
-
7、快速定位到指定区域
-
8、数据排序、工资条制作
-
9、快速筛选(模糊、精确筛选)
-
10、快速插入空行
-
11、快速删除空行
-
12.快速跳转到天涯海角
-
13、.同时查看两个Excel文件
-
14、用条件格式扮靓报表
-
15、一键插入Excel图表
-
16、批量处理行高、列宽
-
17、利用拆分功能查看数据
-
18、批量录入相同内容
-
19、工作表快速跳转
-
20、批量录入表格模板(精品课程)
-
21、Excel函数与公式的应用、公式循环引用的查找
-
22、IF函数单条件判断同比增长
-
23、用sum函数 格式相同,连续多表数据汇总
-
24、excel快捷键
-
25、VLOOKUP函数——根据销售员匹配销售额
-
26、统计各部门销售总额
-
27、统计指定条件个数
-
28、怎样输入当前日期和时间、星期数
-
29、销售业绩排名
-
30、Sumproduct函数-万能函数(销售额汇总求和)
-
31、根据销售员,地区,商品名称汇总
-
32、批量替换PPT字体
-
33、给销售额数据批量添加万元单位
-
34、一秒快速核对两列数据
-
35、快速定位到指定单元格或区域
-
36、快速制作双行标题工资条
-
37、给你的表格做个瘦身
-
38、快速打开常用的Excel文件
-
39、快速打开多个Excel文件
-
40、利用创建组—快速隐藏/展开多列数据
-
41、快速制作下拉菜单
-
42、复制粘贴表格,如何保留数据源列宽格式一致?
-
43、两列数据位置互换
-
44、1秒钟扮靓报表——如何实现表格隔行换色
-
45、快速删除重复记录——保留唯一值
-
46、快速向下填充、向右填充,文本或公式
-
47、给Excel文件添加密码
-
48、插入带图片的批注
-
49、输入公式后不计算?
-
50、如何设置单元格缩进
-
51、快速解决Excel表格总显示货币格式
-
52、批量添加万元单位
-
53、你会四舍五入么?
-
54、用RAND函数机选彩票
-
55、冻结首行你会么?
-
56、超链接的高级应用
-
57、IFERROR函数-屏蔽错误值
-
58、批量填充颜色
-
59、录入数据
-
60、快速输入工号
-
61、快速行列转置
-
62、自定义缩放界面
-
63、多个单元格同时输入
-
64、如何计算立方米?
-
65、快速制作双行标题工资条
-
66、输入带方框的√和×
-
67、快速将姓名对齐
-
68、快速输入性别
-
69、按单位职务排序
-
70、自动计算合同到期日期
-
71、计算时间间隔
-
72、日期和时间的拆分
-
73、快速处理不规范的日期格式
-
74、快速填充合并单元格
-
75、效率加倍的快捷键
-
76、快速复制表格和对象
-
77、快速创建工作表副本
-
78、快速复制序列号
-
79、快速显示公式
-
80、多个单元格同时输入
-
81、快速调整显示比例
-
82、快速自动填充
-
83、快速填充(Ctrl+E)
-
84、Ctrl与数字键结合
-
85、快速将多列数据整理为1列
-
86、快速将1列数据拆分为多列
-
87、快速定位公式
-
88、快速录入数据
-
89、快速累计求和
-
90、身份证号码显示为0怎么办?
-
91、快速制作斜线表头
-
92、文本竖向显示
-
93、神奇的监视窗口
-
94、不一样的格式刷
-
95、快速美化图表
-
96、快速生成当前日期
-
97、快速找出循环引用
-
98、快速提取信息
-
99、二维表快速转换为一维表
-
100、快速多表合并