Java通过POI技术操作Excel(3)----数据导出

在之前的博客中,总结了Excel模板生成和Excel数据录入,然后剩最后一个模块,数据库中数据读取,在之前的基础上我们来看这一模块,应该已经非常容易了,接下来简单的介绍一下:

这里我们仍然以jsp+servlet为例,对SqlServer2005数据库进行操作,如下都是基本步骤:

1、连接数据库;2、根据sql语句获取数据库中值;3、将值进行导出操作;

首先,我们来记性数据库的连接,这个相信接触过java的人都不会陌生,我就不赘述了

  1 public class DataBase {
2 private String className="com.microsoft.sqlserver.jdbc.SQLServerDriver";
3 private String url="jdbc:sqlserver://127.0.0.1:1433;databasename=test";
4 private String name="sa";
5 private String pwd="sa";
6 private Connection conn;
7 private PreparedStatement pstm;
8 private ResultSet rs;
9 private String OneCall=null;
10 //对数据库数据进行修改:增、删、改
11 public boolean update(String sql,Object...args){
12 try {
13 pstm=conn.prepareStatement(sql);
14 for(int i=0;i<args.length;i++){
15 pstm.setObject(i+1, args[i]);
16 }
17 int n=pstm.executeUpdate();
18 if(n>0){
19 return true;
20 }
21 } catch (SQLException e) {
22 e.printStackTrace();
23 }
24 return false;
25 }
26 //查询某一个数据
27 public String queryOne(String sql,Object...args){
28 try {
29 pstm=conn.prepareStatement(sql);
30 for(int i=0;i<args.length;i++){
31 pstm.setObject(i+1, args[i]);
32 }
33 rs=pstm.executeQuery();
34 if(rs.next()){
35 OneCall=rs.getString(1);
36 }
37 } catch (SQLException e) {
38 e.printStackTrace();
39 }
40 return OneCall;
41 }
42 //查询多行数据
43 public List<List<String>> query(String sql,Object...args){
44 List<List<String>> list =new ArrayList<List<String>>();
45 try {
46
47 pstm=conn.prepareStatement(sql);
48 for(int i=0;i<args.length;i++){
49 pstm.setObject(i+1, args[i]);
50 };
51 rs=pstm.executeQuery();
52 while(rs.next()){
53 List<String> row=new ArrayList<String>();
54 for(int i=1;i<=rs.getMetaData().getColumnCount();i++){
55 row.add(rs.getString(i));
56 }
57 list.add(row);
58 }
59
60 } catch (SQLException e) {
61 e.printStackTrace();
62 }
63 return list;
64 }
65 //关闭数据库
66 public void close(){
67 try {
68 if(rs!=null){rs.close();}
69 if(pstm!=null){pstm.close();};
70 if(conn!=null){conn.close();};
71 } catch (SQLException e) {
72 e.printStackTrace();
73 }
74 }
75 //打开数据库
76 public void open(){
77 try {
78 Class.forName(className);
79 conn=DriverManager.getConnection(url,name,pwd);
80 } catch (ClassNotFoundException e) {
81 e.printStackTrace();
82 } catch (SQLException e) {
83 e.printStackTrace();
84 }
85 }
86 //获取列数
87 public int getColumn(String sql){
88 try{
89 pstm=conn.prepareStatement(sql);
90 rs=pstm.executeQuery();
91 return rs.getMetaData().getColumnCount();
92 }catch (Exception e) {
93 // TODO: handle exception
94 }
95 return 0;
96 }
97 //获取行数
98 public int getRow(String sql){
99 int row = 0 ;
100 try{
101 pstm=conn.prepareStatement(sql);
102 rs=pstm.executeQuery();
103 while(rs.next()){
104 row++;
105 }
106 }catch (Exception e) {
107 // TODO: handle exception
108 }
109 return row;
110 }
111 }

接下来,我们在DAO层进行获取值的操作:


1 public class DownLoadDao extends DataBase{
2 public List<List<String>> getDataInDao(){
3 String sql="select * from emp";
4 List<List<String>> list=this.query(sql);
5 return list;
6 }
7 }

最后是关键的数据导出,当然也是非常简单,a、获取标题栏;b、在填充区添加数据


 1 public class DownLoadServiceImpl implements BaseService{
2 DownLoadDao dld=new DownLoadDao();
3 //实现数据库的基本开关
4 public void openStore(){
5 dld.open();
6 }
7 public void closeStore(){
8 dld.close();
9 }
10 public boolean createExcel(HSSFWorkbook excel)throws IOException{


1 List<List<String>> list=this.getData();
2 System.out.println(list);
3 int rowNum=list.size();
4 int columnNum=list.get(0).size();


 1 //基本步骤
2 HSSFSheet sheet=model.createSheet();
3 model.setSheetName(0, "个人信息");
4 //创建第一格的样式
5 HSSFCellStyle style=model.createCellStyle();
6 style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
  style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
7 style.setBorderBottom(HSSFCellStyle.BORDER_MEDIUM);
8 style.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM);
9 style.setBorderRight(HSSFCellStyle.BORDER_MEDIUM);
10 style.setBorderTop(HSSFCellStyle.BORDER_MEDIUM);
11 //创建第一格中字体样式
12 HSSFFont font=model.createFont();
13 font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
14 //将设置的字体样式加入单元格样式中
15 style.setFont(font);
16 //创建第一格单元格,并将之前设置的样式加入
17 HSSFRow row=sheet.createRow((short)0);
18 HSSFCell cell=row.createCell((short)0);
19 cell.setCellValue("个人信息录入");
20 cell.setCellStyle(style);
21 HSSFCell cella=null;
22 for (int i = 1; i < 5; i++) {
23 cella=row.createCell((short)i);
24 cella.setCellValue("");
25 cella.setCellStyle(style);
26 }
27 //设置接下来两行标题的样式
28 HSSFCellStyle styleTitle=model.createCellStyle();
29 //加边框
styleTitle.setBorderBottom(HSSFCellStyle.BORDER_MEDIUM);
styleTitle.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM);
styleTitle.setBorderRight(HSSFCellStyle.BORDER_MEDIUM);
styleTitle.setBorderTop(HSSFCellStyle.BORDER_MEDIUM);
30 HSSFFont fontTitle = model.createFont();
31 fontTitle.setBoldweight((short) 10);// 设置字体的宽度
32 fontTitle.setFontHeightInPoints((short) 10);// 设置字体的高度
33 fontTitle.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 粗体显示
34 styleTitle.setFont(fontTitle);// 设置style1的字体
35 styleTitle.setWrapText(true);// 设置自动换行
36 styleTitle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 设置单元格字体显示居中(左右方向) styleTitle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 设置单元格字体显示居中(上下方向)
37 //创建第二行,并将上面设置的标题样式加入
38 HSSFRow rowTitle=sheet.createRow((short)1);
39 //第二行四列数据
40 HSSFCell cellNum=rowTitle.createCell((short)0);
41 cellNum.setCellValue("编号");
42 cellNum.setCellStyle(styleTitle);
43 HSSFCell cellName=rowTitle.createCell((short)1);
44 cellName.setCellValue("姓名");
45 cellName.setCellStyle(styleTitle);
46 HSSFCell cellMsg=rowTitle.createCell((short)2);
47 cellMsg.setCellValue("验证信息");
48 cellMsg.setCellStyle(styleTitle);
49 HSSFCell cellDept=rowTitle.createCell((short)4);
50 cellDept.setCellValue("部门");
51 cellDept.setCellStyle(styleTitle);
52 //第三行两列数据
53 HSSFRow rowAT=sheet.createRow((short)2);
54 HSSFCell cellS=null;
55 for (int i = 0; i < 2; i++) {
56 cellS=rowAT.createCell((short)i);
57 cellS.setCellValue("");
58 cellS.setCellStyle(styleTitle);
59 }
60 HSSFCell cellSss=rowAT.createCell((short)2);
61 cellSss.setCellValue("密码");
62 cellSss.setCellStyle(styleTitle);
63 HSSFCell cellCard=rowAT.createCell((short)3);
64 cellCard.setCellValue("身份证号");
65 cellCard.setCellStyle(styleTitle);
66 HSSFCell cellD=rowAT.createCell((short)4);
67 cellD.setCellValue("");
68 cellD.setCellStyle(styleTitle);
69 //将标题的合并合并起来
70 Region region=null;
71 region=new Region((short)0,(short)0,(short)0,(short)4);
72 sheet.addMergedRegion(region);
73 region=new Region((short)1,(short)0,(short)2,(short)0);
74 sheet.addMergedRegion(region);
75 region=new Region((short)1,(short)1,(short)2,(short)1);
76 sheet.addMergedRegion(region);
77 region=new Region((short)1,(short)4,(short)2,(short)4);
78 sheet.addMergedRegion(region);
79 region=new Region((short)1,(short)2,(short)1,(short)3);
80 sheet.addMergedRegion(region);
81 //设置剩余的空格,将空着数值填充为空
82 //设置一个需要提供下拉的区域
83 String[] list={"研发部","财务部","工程部",};
84 //定义一个名称,指向刚才创建的下来项的区域
85 HSSFName range = model.createName();
86 range.setNameName("disRange");
87 //确定下拉列表框的位置
88 CellRangeAddressList regions=new CellRangeAddressList(3,65535,4,4);
89 //生成下拉列表框的内容
90 DVConstraint constraint=DVConstraint.createExplicitListConstraint(list);
91 //绑定下拉框的作用区域
92 HSSFDataValidation dataValidate = new HSSFDataValidation(regions, constraint);
93 //对哪一页起作用
94 sheet.addValidationData(dataValidate);


1 for (int i = 3; i < rowNum+3; i++) {
2 HSSFRow row=sheet.createRow(i);
3 for (int j = 0; j < columnNum; j++) {
4 HSSFCell focus=row.createCell(j);
5 focus.setCellValue(list.get(i).get(j).toString());
6 }
7 }

以上我分别以四个模块编写的代码,相信也很容易明白各自的含义,*首先是对数据库的开关操作,*然后是根据从数据库中获取到的值,得到相应的数据参数;*再次是获取标题部分;*最后是增添原来的填充部分,当然这里的填充部分都是包含数据的

这样我们通过Apache
POI对Excel的操作我们都做了简单的介绍,当然这只是单纯面对一个文件时采用的操作,当生成多个模板,或者读取多个数据,或者导出多个数据时,我们必须对于现有的代码进行优化,知其然不如知其所有然,我们只有更好的理解操作的原理,才能在当前基础上进行变动,简化,写的有些凌乱,但自己在理解上更深了一层,也希望对你有所帮助,在开发道路上愈走愈顺,加油....

Java通过POI技术操作Excel(3)----数据导出,码迷,mamicode.com

时间: 2024-08-25 18:27:36

Java通过POI技术操作Excel(3)----数据导出的相关文章

java通过POI技术操作Excel(2)----模板读取,录入数据

先来回顾下通常把java对Excel的操作分为以下功能:1.生成模板,导出模板:2.填充模板,录入数据:3:读取数据库数据,导出数据:在上一篇博文中,我简单记录了模板生成和导出,在这篇博文中,主要来记录--Excel文件导入,数据录入(仍然是以jsp+servlet为例) 既然要解决这个问题,那首先来分析下我们需要面对的有哪些需求需要实现: 1.Excel文件导入(这是最基础的,巧妇难为无米之炊,导入环节也是查了好久才完成的); 2.Excel文件中数据的格式判定,你要读取文件,如果文件中其实没

Java通过POI为Excel添加数据验证

String path = "d:\\success.xlsx";         String sheetName = "sheetlist";         XSSFWorkbook wb = null;         XSSFSheet sheetlist = null;         File inputFile = new File(path);         if (inputFile.exists()) {             wb = n

java使用POI实现excel文件的读取,兼容后缀名xls和xlsx

需要用的jar包如下: 如果是maven管理的项目,添加依赖如下: <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.14</version> </depen

JAVA使用POI获取Excel的列数与行数

Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能. 下面这篇文章给大家介绍了JAVA使用POI获取Excel列数和行数的方法,有需要的朋友们可以参考借鉴,下面来一起看看吧. 前言 报表输出是Java应用开发中经常涉及的内容,而一般的报表往往缺乏通用性,不方便用户进行个性化编辑.Java程序由于其跨平台特性,不能直接操纵Excel.因此,本文探讨一下POI视线Java程序

JAVA使用POI操作excel

这里提一下,java操作excel的组件除了apache的poi,还有jexcelapi(jxl),其中poi组件的获取地址为poi.apache.org. poi组件中常用的类有HSSFworkbook表示一个完整的excel表格,HSSFsheet表示excel中的一个工作薄,HSSFRow表示工作薄中的一行,HSSFCell表示一个单元格 下面是一个简单的写入的demo public static void main(String [] args){ try { HSSFWorkbook

java使用POI操作excel文件,实现批量导出,和导入

一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Excel 95及以后的版本,即可操作后缀为 .xls 和 .xlsx两种格式的excel. POI全称 Poor Obfuscation Implementation,直译为"可怜的模糊实现",利用POI接口可以通过JAVA操作Microsoft office 套件工具的读写功能.官网:htt

Java 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包)

ava 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包) 假设现在要做一个通用的导入方法: 要求: 1.xml的只定义数据库表中的column字段,字段类型,是否非空等条件. 2.excel定义成模板,里面只填写了所需要的数据,有可能数据有问题. 3.在导入的时候就需要对每个excel单元格的数据进行验证. 4.验证完之后,若所有数据正确,那么批量保存.若有一点点错误,就不执行保存操作,并提示错误原因. 思路: 1.完美使用了Map的功能,先将xml中的数据存入map

使用poi读取Excel文件数据

除分数被转换为小数存储外,其他数据经本人测试无问题,如发现问题请留言,方便及时更新 package com.haiyisoft.iecp.util; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.text.DateFormat;

java使用poi生成Excel文件

1. maven导入poi包: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.17</version> </dependency> pom.xml 2. 新建测试数据实体类: package com.clz.testexportexcel; public class Exc