文档章节

开源组件POI打印Excel报表

藍色的海
 藍色的海
发布于 2011/11/25 23:34
字数 1143
阅读 1593
收藏 2

      首先将POI组件中的jar包放入项目中路径下的WEB-INF/lib目录中,然后便可以在JSP中使用POI组件了。

      新建一数据库连接类Conn.java,代码如下:

    

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class Conn {
	private final String dbDriver="com.mysql.jdbc.Driver" ;
	private final String url="jdbc:mysql://localhost:3306/employee";
	private final String userName = "root";
	private final String password = "ldm";
	private Connection con=null;
	Statement s=null;
    public Conn(){
    	try{
    		Class.forName(dbDriver);
    		con=DriverManager.getConnection(url,userName,password);
    		
    	}catch(Exception e){
    		System.out.println(e.getMessage());
    	}
    }
    
    public ResultSet executeQuery(String sql){
    	ResultSet rs=null;
    	try{
    		Conn conn=new Conn();
    		s=con.createStatement();
    		rs=s.executeQuery(sql);
    	}catch(Exception e){
    		e.printStackTrace();
    	}
    	return rs;
    }
    
    public void close(){
    	try{
    		if(s!=null||con!=null){
    			s.close();
    			con.close();
    		}
    	}catch(Exception e){
    		e.printStackTrace();
    	}
    }
}

           为了将从数据库中取出的数据放入List,创建JavaBean,命名为POITest.java;这个JavaBean除了setXXX()和getXXX()方法之外,还有一个根据用户需要显示的行数从数据库中取值ReadRecord(int rsRow)方法,它的返回值类型是List集合,程序代码如下:

          

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.ResultSet;
import java.util.List;
import java.util.ArrayList;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class POITest {
    
	private int id;
	private String studentCode;
	private String name;
	private String sex;
	private String institute;
	private String department;
	private String classes;
	private String phone;
	private String address;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getStudentCode() {
		return studentCode;
	}
	public void setStudentCode(String studentCode) {
		this.studentCode = studentCode;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public String getInstitute() {
		return institute;
	}
	public void setInstitute(String institute) {
		this.institute = institute;
	}
	public String getDepartment() {
		return department;
	}
	public void setDepartment(String department) {
		this.department = department;
	}
	public String getClasses() {
		return classes;
	}
	public void setClasses(String classes) {
		this.classes = classes;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}

	 
	 public static List ReadRecord(int rsRow){
		 Conn conn=new Conn();
		 String sql="select * from student where id<='"+rsRow+"'";
		 ResultSet rs=conn.executeQuery(sql);
		 List l=new ArrayList();
		 try{
			 while(rs.next()){
				 POITest p=new POITest();
				 p.setId(rs.getInt("id"));
				 p.setStudentCode(rs.getString("studentCode"));
				 p.setName(rs.getString("name"));
				 p.setSex(rs.getString("sex"));
				 p.setInstitute(rs.getString("institute"));
				 p.setDepartment(rs.getString("department"));
				 p.setClasses(rs.getString("classes"));
				 p.setPhone(rs.getString("phone"));
				 p.setAddress(rs.getString("address"));
				 l.add(p);
			 }
			 conn.close();
		 }catch(Exception e){
			 e.printStackTrace();
		 }
		 return l;
	 }
		
	 public static List ReadRecord(){
		 Conn conn=new Conn();                     //连接数据库
		 String sql="select * from student";       //查询学生信息
		 ResultSet rs=conn.executeQuery(sql);      //执行查询
		 List l=new ArrayList();                   //定义List集合
		 
			try{	
				while(rs.next()){
					 POITest p=new POITest();       //实例化对象
					 p.setId(rs.getInt("id"));      //为对象赋值
					 p.setStudentCode(rs.getString("studentCode"));
					 p.setName(rs.getString("name"));
					 p.setSex(rs.getString("sex"));
					 p.setInstitute(rs.getString("institute"));
					 p.setDepartment(rs.getString("department"));
					 p.setClasses(rs.getString("classes"));
					 p.setPhone(rs.getString("phone"));
					 p.setAddress(rs.getString("address"));
					 l.add(p);                      //将对象添加到List集合中
					
				}
				conn.close();                       //关闭数据库
			}catch(Exception e){
				e.printStackTrace();
			}
			return l;                               //返回集合
			
	 }
	 /*
	  * 为了添加工作表,必须创建一个HSSFSheet实例,使用POI组件中的createSheet("sheetname")创建工作表,根据显示内容大小创建指定大小的单元格。
	  * 程序代码如下:
	  * 
	  */
	 public void WriteCell(int rsRow){
		 HSSFWorkbook wb=new HSSFWorkbook();
		 HSSFSheet sheet=wb.createSheet("poiexample");//建立名为poiexample的报表
		 sheet.setColumnWidth(0, 2500);
		 sheet.setColumnWidth(1, 6000);
		 sheet.setColumnWidth(2, 3500);
		 sheet.setColumnWidth(3, 9000);
		 sheet.setColumnWidth(4, 9000);
		 sheet.setColumnWidth(5, 8000);
		 sheet.setColumnWidth(6, 8000);
		 sheet.setColumnWidth(7, 9000);
		 sheet.setColumnWidth(8, 9000);
	     HSSFRow row=sheet.createRow(0);
		 HSSFCell cell[]=new HSSFCell[9];
		 for(int i=0;i<9;i++){                //遍历每行的每列
			 cell[i]=row.createCell(i);
		 }
		 cell[0].setCellValue("id号");         //在单元格写入文字
		 cell[1].setCellValue("学号");
		 cell[2].setCellValue("姓名");
		 cell[3].setCellValue("性别");
		 cell[4].setCellValue("系别");
		 cell[5].setCellValue("专业");
		 cell[6].setCellValue("班级");
		 cell[7].setCellValue("电话");
		 cell[8].setCellValue("地址");
		 
		 List l=POITest.ReadRecord(rsRow);
		 if(l.size()>0 && l!=null){
			 for(int i=0;i<l.size();i++){
				 POITest p2=(POITest)l.get(i);
				 HSSFRow datarow=sheet.createRow(i+1);
				 HSSFCell data[]=new HSSFCell[9];
				 for(int j=0;j<9;j++){
					 data[j]=datarow.createCell(j);
				 }
				 data[0].setCellValue(p2.getId());
				 data[1].setCellValue(p2.getStudentCode());
				 data[2].setCellValue(p2.getName());
				 data[3].setCellValue(p2.getSex());
				 data[4].setCellValue(p2.getInstitute());
				 data[5].setCellValue(p2.getDepartment());
				 data[6].setCellValue(p2.getClasses());
				 data[7].setCellValue(p2.getPhone());
				 data[8].setCellValue(p2.getAddress());
			 }
		 }
		 File file=new File("e:\\workbook.xls");
		 try{
			 FileOutputStream fileOut=new  FileOutputStream(file);
			 wb.write(fileOut);
			 fileOut.close();
		 }catch(IOException e){
			 e.printStackTrace();
		 }
	 }
}

  最后创建一JSP页面,命名为PoiTest.jsp;程序代码如下:

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.sql.*,com.wsy.POITest,java.io.*,java.io.FileOutputStream,
    org.apache.poi.hssf.usermodel.*,java.util.*,java.text.*"%>
      <jsp:useBean id="poi" scope="page" class="com.wsy.POITest"/> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>学生管理系统</title>
</head>
<script type="text/javascript" language="javascript">
      function fn1(){
         <%poi.WriteCell(9); %>
         alert("导出报表完毕!导出位置为e:\\workbook.xls!!!");
      } 
</script>
<body>
<table border="1">
<tr><td>ID号</td><td>学号</td><td>姓名</td><td>性别</td><td>系别</td><td>专业</td><td>班级</td><td>电话</td><td>地址</td></tr>
<% List l=poi.ReadRecord();
for(int i=0;i<l.size();i++){
	POITest p2=(POITest)l.get(i);
%><tr>
<td><%=p2.getId() %><td>
<td><%=p2.getStudentCode() %></td>
<td><%=p2.getName()%></td>
<td><%=p2.getSex() %></td>
<td><%=p2.getInstitute() %></td>
<td><%=p2.getDepartment() %></td>
<td><%=p2.getClasses() %></td>
<td><%=p2.getPhone() %></td>
<td><%=p2.getAddress() %></td></tr>
<%  
}
%>
</table><br/>
<input type="button" value="导出报表" onClick='fn1()'/>
</body>
</html>

           重启Tomcat服务器,在IE浏览器中运行JSP页面;效果如下:

单击“导出报表”按钮,出现一个提示框

打开E盘,可以看到已经生成一个名为workbook.xls的文件,打开此文件,如下:

© 著作权归作者所有

藍色的海
粉丝 3
博文 19
码字总数 7205
作品 0
广州
其他
私信 提问
java操作excel文件的两种方案

 微软在桌面系统上的成功,令我们不得不大量使用它的办公产品,如:Word,Excel。时至今日,它的源代码仍然不公开已封锁了我们的进一步应用和开发。在我们实际开发企业办公系统的过程中,常...

山里的红杏
2018/05/11
0
0
JavaScript与Excel灵活交互制作Web报表

【IT168 技术】Web报表的开发是一个比较常见的功能,然而在B/S构件上实现这些功能并没有在C/S构架上那些简单,针对这样的问题,本篇文章提供相应的解决方案,在下面的内容中将介绍JS与Excel...

天极网
2012/03/01
0
0
PageOfficeV4.0动态生成Excel文件

针对excel文件生成的类是:com.zhuozhengsoft.pageoffice.excelwriter 请参考PageOffice开发包里Samples4示例: 三、8、完全编程实现动态生成Excel文件(专业版、企业版) 一个完全用程序生成...

山里的红杏
2018/09/12
0
0
Java程序员从笨鸟到菜鸟之(一百零四)java操作office和pdf文件(二)利用POI实现数据导出excel报表

在上一篇博客中,我们简单介绍了java读取word,excel和pdf文档内容 ,但在实际开发中,我们用到最多的是把数据库中数据导出excel报表形式。不仅仅简单的读取office中的数据.尤其是在生产管理...

长平狐
2012/11/12
1K
0
Java POI导出EXCEL经典实现 Java导出Excel弹出下载框

在web开发中,有一个经典的功能,就是数据的导入导出。特别是数据的导出,在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作。而数据导出的格式一般是EXCEL或者...

姚君
2014/04/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

重定向又是什么“垃圾”——教你再分类

  前言:之前写了几篇JSP的博客,现在又回过头来看Servlet,温故而知新,再回顾回顾,总会有收获的。以前学习Servlet感觉内容很多,现在看的时候,其实也没多少东西,只需知道Servlet的生命...

SEOwhywhy
24分钟前
0
0
一图胜千言!这10种可视化技术你必须知道

全文共4549字,预计学习时长9分钟 图片来源:Willian Justen deVasconcellos on Unsplash 相比于浩如烟海的数据表格,大部分人还是更喜欢视觉资料,这一点已不足为奇。也是出于这个原因,人们...

读芯术
28分钟前
1
0
Spring Boot 自动配置(auto-configurtion) 揭秘

本章,我们为你揭秘Spring Boot自动配置(Auto Configuration)运行机制,谈到auto-configuration,肯定离不开@EnableAutoConfiguration注解。 package org.springframework.boot.autoconfi...

爱编程的浪子
34分钟前
0
0
RabbitMQ延迟消息的延迟极限是多少?

之前在写Spring Cloud Stream专题内容的时候,特地介绍了一下如何使用RabbitMQ的延迟消息来实现定时任务。最近正好因为开发碰到了使用过程中发现,延迟消息没有效果,消息直接就被消费了的情...

程序猿DD
35分钟前
2
0
MySQL知识库语雀

类型:所有 MySQL知识库 MySQL知识库 06-05 20:57 近期阅读文章 近期已读或者未读文章列表 03-08 10:49 日常脚本 这里是平时工作会用到的一些常用的脚本,作为统一管理 03-08 05:09 培训 03...

rootliu
37分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部