-
?
EXCEL玩转数据库,8种技巧,几十种功能,终于被整合一起了
李珊
展开
前言:
在职场报表中,EXCEL的魔法,可以说无处不在,是一项每个人必须掌握的技能,但是在EXCEL所有的函数之中,有一种函数,称之为【数据库函数】,高效,运行速度快,专门为大数据提供,却很少为人知
收藏+转发,传播知识,是一种美德
函数解释
数据库函数均有三个相同的参数:database、field 和 criteria。这些参数指向数据库函数所使用的工作表区域。其中参数 database 为工作表上包含数据清单的区域。参数 field 为需要汇总的列的标志。参数 criteria 为工作表上包含指定条件的区域。写法为=(database、field,criteria)
本篇主要介绍DGET、dcount、daverage、dmax、dmin 5个函数,套路完全一致。
特别提醒
这是一个让人又爱又恨的函数,爱,是因为这个函数,处理数据高效,快速。
恨,是因为如果不知道原理,会出大问题的
经典应用:
用法1:以关键词开头的处理
当我们在第三个参数,如实例,输入A的时候, 实际上,计算的是以A开头的所有物料的库存DSUM函数,计算以A开头的所有库存的和dcount函数,计算以A开头的物料的个数dmax函数,计算以A开头的物料的库存的最大值dmin函数,计算以A开头的物料的库存的最小daverage函数,计算以A开头的物料的库存的平均值特别提醒,是以A开头,不是单元格值等于A!!!!在第二个参数,我们这里输入的是2,是因为返回的值,在条件区域的第二列,当然我们可以直接输入B2,就是列号也是可以的用法2:不以A为结尾,的符合条件的值,主要为中间,或是首字母为A,如果末尾为A,只要中间有A这个字符,也是符合条件的
用法3:包含A的所有符合条件的个数
用法4:和用法3一样,为包含A的符合条件的个数
用法5:第二个字符为A的符合条件的个数,且字符长度大于等于3,因为一个问号,代表一个字符
用法6:以B开头的符合条件的值,因为没有,所以都为0
用法7:
这里输入的是,先切换到英文,而后输入单引号',而后输入=A,意思是单元格值完全等于A的符合条件的个数,所以只有一个单元格
用法8:
第二个字符为A,并且长度等于3的符合条件的值的处理
数据库函数,使用方法,就介绍完了.
-
?
excel如何把想要的数据导出来到另一张表格里?
凯瑟琳
展开
1.如下是一个Excel工作薄中的两张表,分别为Sheet1和Sheet2,下面分别以表1和表2来代替。我们要把表2中的语文成绩导入到表1中,但是从图中可以看出表1和表2名字并不一一对应
2.选中表1,选中C2单元格,即语文项目中第一个要录入的成绩。选择“插入—函数”命令
3.在“或选择类别”中选择“查找与引用”
4.在对应的“选择函数”中选择“VLOOKUP”,点击确定
5.在出现的“函数参数”面板点击第一个选项箭头处的按钮
6.点击“张三”名字,即“A2”单元格,表示我们要查找“张三”的成绩,点击上面的按钮回到面板上
7.点击第二个选项箭头处的按钮
8.选中表2,同时选择A列和B列,然后点击上面的按钮
9.因为在表2中语文成绩在第二列,所以第三项我们填入数字“2”
10.第四项我们直接填入“0”即可,点击确定
11.看到表1中张三的语文成绩出现了数值,该数值与表2相同
12.选中C2单元格,用填充柄下拉,所有的语文成绩就从表2填入表1中去了
(本文内容由百度知道网友茗童贡献)
-
?
JDBC封装/Java处理excel/WEB基础知识
巴尔奇克
展开
对JDBC的封装?
1.将变的内容以参数形式传入
2.将不变的固定下来
Java处理EXCEL?【JXL】
1.读
2.写
WEB基础知识
第一、两种架构
1.C/S:Client /Server 客户端 服务器 模式
QQ 360 大型网络游戏
2.B/S:Browser/Server 浏览器 服务器 模式
网站 应用系统 页游
第二、网络中的计算机,进行通信,所遵循的规范,称之为协议。
第三、在JAVAWEB中,客户端和服务器进行交互遵循的是HTTP协议。
第四、HTTP是一种建立在TCP协议基础之上,基于请求、响应模式的无状态的应用层协议。
第五、请求:从客户端发往服务器的信息【字符串】。
1.请求行 请求的方法 资源 协议版本HTTP/1.1
2.请求头 Host Accept Accept-language....
3.空格
4.消息体 key1=value1&key2=value2
第六、响应: 从服务器返回到客户端信息【字符串】
1.状态行 协议版本 状态码 状态字符串
2.响应头 Content-Type Conent-length cookie: .....
3.空格
4.响应正文
第七、浏览器:能够发出标准的HTTP请求,并可以解析标准的HTTP响应的软件(一堆别人写的代码(不一定使用JAVA))
第八、WEB服务器:是一种能够接受标准的HTTP请求,返回标准的HTTP响应的软件。
第九、Tomcat就是一款免费的开源的纯JAVA实现的WEB服务器。
第十、Servlet/JSP容器:提供了Servlet运行环境,管理Servlet的生命周期的一个组件(一堆类,零件)。一般容器存在于服务器中。比如:Tomcat中就有一个servlet容器catalina
第十一、Servlet=JAV代码+HTML标签(以JAVA代码为主) JSP=HTML标签+JAVA代码(以标签为主)
-
?
一行代码完成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.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;/* 作为 excel 的模型映射,需要 setter 方法 */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数据库基础--以SQL Server为例
清心
展开
sql server数据库基本概念
使用文件保存数据存在几个缺点:
1、文件的安全性问题;
2、文件不利于查询和对数据的管理;
3、文件不利于存放海量数据
4、文件在程序中控制不方便。
数据库的定义(1)
严格地说,数据库是“按照数据结构来组织、存储和管理数据的仓库”。在经济管理的日常工作中,常常需要把某些相关的数据放进这样的“仓库”,并根据管理的需要进行相应的处理。例如,企业或事业单位的人事部门常常要把单位职工的基本情况(职工号、姓名、年龄、性别、籍贯、工资、简历等)存放在表中,这张表就可以看成一个数据库。有了这个“数据仓库”我们就可以根据需要随时查询某职工的基本情况,也可以查询工资在某个范围内的职工人数等等。这些工作如果都能在计算机上自动进行,那我们的人事管理就可以达到极高的水平。此外,在财务管理、仓库管理、生产管理中也需要建立众多的这种“数据库”,使其可以利用计算机实现财务、仓库、生产的自动化管理。
数据库的定义(2)
J.Martin给数据库下了一个比较完整的定义:数据库是存储在一起的相关数据的集合,这些数据是结构化的,无有害的或不必要的冗余,并为多种应用服务;数据的存储独立于使用它的程序;对数据库插入新数据,修改和检索原有的数据均能按一种公用的和可控制的方式进行。当某个系统中存在结构上完全分开的若干个数据库时,则该系统包含一个“数据库集合”。
数据库的基本结构
数据库的基本结构分三个层次,反映了观察数据库的三种不同角度。
1、物理数据层
它是数据库的最内层,是物理存贮设备上实际存储的数据的集合。这些数据的原始数据,是用户加工的对象,由内部模式描述的指令操作处理的位串、字符和字组成。
2、概念数据层
它是数据库的中间一层,是数据库的整体逻辑表示。指出了每个数据的逻辑定义及数据间的逻辑联系,是存贮记录的集合。它所涉及的是数据库所有对象的逻辑关系,而不是它们的物理情况,是数据库管理员概念下的数据库。
3、逻辑数据层
它是用户所看到和使用的数据库,表示了一个或一些特定用户使用的数据集合,即逻辑记录的集合。
数据库不同层次之间的联系是通过映射进行转换的。
数据库的基本特点
1、实现数据共享
数据共享包含所有用户可同时存取数据库中的数据,也包括用户可以用各种方式通过接口使用数据库,并提供数据共享。
2、减少数据的冗余度
同文件系统比,数据库实现了数据共享,从而避免了用户各自建立应用文件。减少了大量重复数据,减少了数据冗余,维护了数据的一致性
3、数据实现集中控制
文件管理方式中,数据处于一种分散的状态,不同的用户或同一用户在不同处理中其文件之间毫无关系。利用数据库可对数据进行集中控制和管理,并通过数据模型表示各种数据的组织以及数据间的联系。
4、数据一致性和可维护性,以确保数据的安全性和可靠性。
5、故障恢复
目前主流数据库
微软: Sql Server和Access
瑞典MySQL: AB公司MySql
IBM公司: DB2和Informix
美国Sybase公司: Sybase
美国Oracle公司: Oracle
数据库选择:
1、成本;2、功能;3、并发性要求;4、安全性;
sql server介绍(1)
SQL是英文Structured Query Language的缩写,意思为结构化查询语言。SQL语言的主要功能就是同各种数据库建立联系,进行沟通。按照ANSI(美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言。SQL语句可以用来执行各种各样的操作,例如更新数据库中的数据,从数据库中提取数据等。目前,绝大多数流行的关系型数据库管理系统,如Oracle、Sybase、Microsoft SQL Server、Access等都采用了SQL语言标准。
sql server介绍(2)
SQL Server是一个关系数据库管理系统。它最初是由Microsoft Sybase和Ashton-Tate三家公司共同开发的,于1988年推出了第一个OS/2版本。在Windows NT推出后,Microsoft与Sybase在SQL Server的开发上就分道扬镳了,Microsoft将SQL Server移植到Windows NT系统上,专注于开发推广SQL Server的Windows NT版本。Sybase则较专注于SQL Server在UNIX操作系统上的应用。
企业管理器的使用(PS:比较简单,不再赘述)
查询分析器的使用(1)
企业管理器给用户提供了一个很方便的图形界面管理工具,用起来感觉直观方便,可是它也有缺点,当一个表的记录非常大的时候,对表的各种操作,都显得不方便了,比如:
1、要求从1000行记录中查询是否存在名为“孙小明”的人
2、要求把1000行记录中工资低于100的人,工资增加10%
3、要求把年龄大于30的人从数据表中删除
这时,会发现使用企业管理器是很不方便的
所以微软为我们提供另外一个操作数据库的工具,查询分析器。查询分析器可以非常方便的完成上述任务。
查询分析器的使用(2)--sql语句
SQL全称是“结构化查询语言(Structured Query Language)”。
SQL(Structured Query Language)是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。结构化查询语言(Structured Query Language)最早是IBM的圣约瑟研究实验室为其关系数据库管理系统SYSTEM R开发的一种查询语言,它的前身是SQUARE语言。SQL语言结构简洁,功能强大,简单易学,所以自从IBM公司1981年推出以来,SQL语言得到了广泛的应用。如今无论是像Oracle、Sybase、Informix、SQL Server这些大型的数据库管理系统,还是像Visual Foxpro、PowerBuilder这些PC上常用的数据库开发系统,都支持SQL语言作为查询语言。
查询分析器的使用(3)--sql语句
SQL语言包含4个部分:
数据定义语言(DDL),例如:CREATE、DROP、ALTER等语句。
数据操作语言(DML),例如:INSERT、UPDATE、DELETE语句。
数据查询语言(DQL),例如:SELECT语句。
数据控制语言(DCL),例如:GRANT、REVOKE、COMMIT、ROLLBACK等语句。
查询分析器的使用(4)--实例
[sql] view plain copy
--创建数据库
createdatabase LiangshanHero;
--使用数据库
use LiangShanHero;
--创建表
createtable hero
(
heroId int, --排名
heroName varchar(50), --名字
heroNickName varchar(50), --外号
sex char(2) --性别
);
altertable hero add sal int; --添加薪水属性
--使用SQL语句来添加数据
insertinto hero values(1, '宋江', '及时雨', '男');
insertinto hero values(2, '卢俊义', '玉麒麟', '男');
insertinto hero values(3, '吴用', '智多星', '男');
insertinto hero values(4, '公孙胜', '入云龙', '男');
--使用SQL语句来修改数据
update hero set sal = 20000 where heroid = 1;
update hero set sal = 15000 where heroid = 2;
update hero set sal = 10000 where heroid = 3;
update hero set sal = 13000 where heroid = 4;
--使用SQL语句来查询数据
select * from hero;
--查询工资低于的人
select * from hero where sal < 15000;
--把工资低于的人,工资提高%
update hero set sal = sal * 1.1 where sal < 15000;
--删除性别为女的人
deletefrom hero where sex = '女';
表的管理--表名和列的命名规则
1、必需以字母,_开头,例如:ta,_ta
2、长度不能超过128个字符
3、不要使用sql server的保留字
4、只能使用如下字符A-Z,a-z,0-9,$,#,_等
表的管理--支持的数据类型
字符型(非unicode编码)
char 定长 最大8000字符(非unicode编码)
char(10)'Switch'前5个字符放'Switch',后添5个空格补全
varchar 变长 最大8000字符(非unicode编码)
varchar(10)'Switch'sql server分配5个字符,这样可以节省空间
ntext可变长度Unicode数据的最大长度为2的30次方-1(1,073,741,823)个字符
text可变长度非Unicode数据的最大长度为2的31次方-1(2,147,483,647)个字符
区别:
1、text是字节格式存储英文的,也可以存中文但有时候会显示成乱码
2、ntext是多字节格式存储unicode的,也就是存储各种文字用的。
在什么时候使用char型而不使用varchar,在知道字段定长固定时就使用char
字符型(unicode编码)
nchar 定长 最大4000字符(unicode编码)
nchar(20)'Switch'前10个字符放'Switch',后添10个空格补全
nvarchar 变长 最大4000字符(unicode编码)
nvarchar(20)'Switch'sql server分配10个字符,这样可以节省空间
特别说明:
1、一般带有汉字的字段用nvarchar,全英文或符号的用varchar,因为nvarchar为unicode字符集,该类型的字段无论是单个字母还是单个汉字都占两个字节,而varchar,字母占一个字节,汉字占两个,nvarchar处理汉字或其它unicode字符集的速度要比varchar字段快。
2、如果有一些特殊字符在nvarchar中没有的,如日文的某些字符,那当然只能选合适的代码页用varchar了,而且这些特有语言特有的字符转换到nvarchar会消失
数字型
1、bit 范围 0到1
2、int 范围 负的2的31次方到正的 2的31次方-1
3、bigint 范围 负的2的63次方到正的 2的63次方-1
4、float 存放小数,不推荐使用
5、numeric 小数
强烈建议 如果要去存放小数最好使用numeric
日期类型
datetime(表示日期)
timestamp(时间戳)
一般情况下 用datetime表示日期
--sql server为我们提供一个专门的时间函数getdate()
[sql] view plain copy
createtable ta--建表
(bir datetime)--字段
insertinto ta values(getdate())--添加时间
图片
image保存图片,但是用的很少,一般用路径保存图片,在软件公司往往使用图片服务器和图床技术
视频
binary字段可以存放,但是往往将视频文件保存在文件服务器上,sql server中只保留文件路径,这样存取效率高。
表的管理--添加数据
插入部分字段(语法)
insert into 表名 (字段名1,字段名2,...) values (对应字段数据1,对应字段数据2,...)
表的管理--修改数据
修改一个字段(语法)
update 表名 set 字段名='新值' where 字段='值'
例:
[sql] view plain copy
update student set sex='女'where xh='A001'
update clerk set age=38 where cleName='贾政'
修改多个字段(语法)
update 表名 set 字段名1='新值',字段名2='新值'... where 字段='值'
例:
[sql] view plain copy
update student set sex='男',birthday='1980-04-01'where xh='A001'
update clerk set cleName='薛蟠',age=40 where cleId=2
修改含有null值的数据(语法)
update 表名 set 字段名='新值' where 字段 is null
例:
[sql] view plain copy
update clerk set cleName='薛宝钗'where age isnull
表的管理--删除数据
删除全部数据
delete from 表名
删除指定数据
delete from 表名 where 字段名='值'
删除多个指定数据
delete from 表名 where 字段名1='值' and 字段名2='值' and或or ...
表的管理--修改表
添加一个字段
[sql] view plain copy
ALTERTABLE distributors ADDCOLUMN address varchar(30);
修改字段的类型/或是名字(不能有数据)
[sql] view plain copy
ALTERTABLE distributors
ALTERCOLUMN address TYPE varchar(80),
ALTERCOLUMNname TYPE varchar(100);
ALTERTABLE distributors RENAME COLUMN address TO city;
删除一个字段
[sql] view plain copy
ALTERTABLE distributors DROPCOLUMN address RESTRICT;
修改表的名字
[sql] view plain copy
ALTERTABLE distributors RENAME TO suppliers;
删除表
drop table 表名;
主键和外键
主键,一张表中只能有一个主键
1、主键(primary key),不能够重复出现;
2、主键必需给值,换言之主键不能为null
3、主键可以修改,但不能修改为同名的,同时要明确字段不有重复,否则报错。
外键
1、外键只能指向主键
2、外键和主键的数据类型要一致
员工管理系统
PS:之后很多例子都是基于下面所建数据库和表的
[sql] view plain copy
---创建dept表
createtable dept
(
deptno intprimarykey, --部门编号
dname nvarchar(30), --部门名称
loc nvarchar(30) --所在地
);
--创建emp表
createtable emp
(
empno intprimarykey, --员工编号
ename nvarchar(30), --员工姓名
job nvarchar(30), --员工职位
mgr int, --上级编号
hiredate datetime, --入职日期
sal numeric(8, 2), --薪水
comm numeric(8, 2), --奖金
deptno intforeignkeyreferences dept(deptno) --deptno是外键
);
--外键
--①外键引用的键必须是主键
--②外键的数据类型必须和引用的主键数据类型一致
--向dept表中添加数据
insertinto dept values (10,'accounting','new york');
insertinto dept values (20,'research','dallas');
insertinto dept values (30,'sales','chicago');
insertinto dept values (40,'operations','boston');
--向emp表中添加数据
insertinto emp (empno,ename,job,mgr,hiredate,sal,deptno) values (7369,'smith','clerk',7902,'1980-12-17',800.00,20);
insertinto emp values(7499,'allen','salesman',7698,'1981-2-20',1600.00,300.00,30);
insertinto emp values(7521,'ward','salesman',7698,'1981-2-22',1250.00,500.00,30);
insertinto emp (empno,ename,job,mgr,hiredate,sal,deptno) values (7566,'jones','manager',7839...
-
?
整理关于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
Xi
展开
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文件中取得数据,并按照指定的条件过滤。
-
?
JavaEE——Java导出Excel表
鲁自中
展开
声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。
Java导出Excel表
首先去maven里面下载 upload 1.3.3 版本 下载到你的maven工程里面
上传文件必须是post方法
上传文件同时有表单值的话 你用request.getParame是获得不到的
Java导出Excel表
去maven工厂下载 POI jar包
-
?
Java使用Apache POI导出Excel
朴次茅斯
展开
一.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实现文件批量导入导出实例(兼容xls,xlsx)
骆孤菱
展开
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数据库导出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、快速多表合并