2023年11月28日发(作者:)
使用JSP操作Excel
第一种方法:静态方法生成Word和Excel文档
要使JSP网页以Word或Excel格式打开,只需要利用Page指令的contentType属性。ContentType设置
ContentType报头,标明即将发送到客户端程序的文档的MIME类型。浏览器根据这个MIME类型,以相应
的方式打开网页。JSP默认的MIME类型是text/html,这时经普通HTML的方式呈现网页内容。要将网页以
Work或Excel方式打开,则要告诉浏览器MIME类型为Word或Excel。
Word页面需要在JSP文件头设置如下指令。
<%@ page contentType=”application/msword;charset=GBK”%>
Excel页面需要在JSP文件头设置如下指令
<%@ page contentType=”application/-excel;charset=GBK”%>
第二种方法:如何使用POI组件操作Excel
可以通过设置响头ContentType达到以Excel文档形式输出的目的。
POI组件介绍
Apache的Jakata项目POI,就可以用来操作Excel,并满足大部分需要。POI下面几个子项目,其中
HSSF项目就上用来实现Excel的读写的。下面是HSSF的主页:/poi/hssf/.
POI组件可以到下载,下载后,将jar包所有的位置加入工程的lib目录中或将jar包
所有的位置加入到classpath,或者将其解压的jar包拷到Tomcat目录的commonlib目录
最新的下载地址:/
(1)创建连接数据库的JavaBean的文件
package myBean;
import .*;
public class DBConnection {
String sDBDriver="verDriver";
String
//String sDBDriver="bcDriver";
//String sConnStr="jdbc:odbc:JspSamples";
public DBConnection(){
try{
Class.forName(sDBDriver);
}catch(ClassNotFoundException e){
System.out.println("DBConnection()"+sage());
}
}
public ResultSet execQuery(String sql){
ResultSet rs=null;
try{
Connection conn=DriverManager.getConnection(sConnStr,"sa","sa");
Statement stmt=Statement();
rs=eQuery(sql);
}catch(SQLException ex){
System.out.println("ery()"+sage());
sConnStr="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=JspSamples";
}
return rs;
}
}
(2)下面的操作Excel的类会取出的前面数据库里面的所有数据,然后逐条写到Excel文件中。类的文
件名
package myBean;
import del.*;
import .*;
import .*;
import ection;
public class POIExcel {
private DBConnection con;
public POIExcel() {
con=new DBConnection();
}
//@SuppressWarnings("deprecation")
@SuppressWarnings("deprecation")
public void exportExcel(String name,OutputStream out){
HSSFWorkbook wb=new HSSFWorkbook();
HSSFSheet sheet=Sheet(name);
HSSFRow row=Row(0);
HSSFCell cell=Cell((short)0);
oding(HSSFCell.ENCODING_UTF_16);
lValue("姓名");
cell=Cell((short)1);
oding(HSSFCell.ENCODING_UTF_16);
lValue("电子邮件");
String sql="select name,email from db_user";
int nRow=1;
try{
ResultSet rs=con.execQuery(sql);
while(()){
row=Row(nRow++);
cell=Cell((short)0);
oding(HSSFCell.ENCODING_UTF_16);
lValue(ing("name"));
cell=Cell((short)1);
oding(HSSFCell.ENCODING_UTF_16);
lValue(ing("email"));
}
();
}catch(SQLException e){
System.out.println("Excel()"+sage());
}
try{
(out);
}catch(Exception e){
System.out.println("Excel()"+sage());
}
}
}
程序首先创建一个HSSFWorkbook实例,它相当于一个Excel文件,然后创建HSSFSheet,它相当于
一个Excel文件的一页。
在创建了页对象之后,就可以向该页中添加内容了。POI将Excel文件页面中的每行用HSSFRow来
表示,而每个单元格用HSFFCell对象来表示。向页面添加内容时,首先创建行,然后再创建行所包含的
单元格,设置单元格的数据。向行中添加单元格时,行的列是以0开始进行索引的。
语句oding(NG_UTF_16)用来说明单元格中的数据的编码是UTF-16,以
便处理汉字,否则默认编码不能识别汉字,将会出现乱码。
最后调用HSSFWorkbook的write方法输出添加好内容的Excel文件。
POI提供的类和方法很丰富,远不止这里用到的,在进行实际开发时还需要参考相关的手册。
下面是用来调用该Servlet实现POI操作并生成Excel的Servlet代码,文件名为。
package myBean;
import ption;
import riter;
import tException;
import rvlet;
import rvletRequest;
import rvletResponse;
import el;
public class POITest extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
tentType("application/-excel");
POIExcel excel=new POIExcel();
Excel("user",putStream());
}
}
语句tentType(“application/-excel”);用来说明返回到客户端的数据为Excel格式。
随后两句首先创建了POIExcel对象,然后调用它的exportExcel()方法输出Excel文件。
(3)在中的配置代码:
xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="/xml/ns/j2ee"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/xml/ns/j2ee
/xml/ns/j2ee/web-app_2_">
<servlet>
<description>EXCELdescription>
<display-name>EXCELdisplay-name>
<servlet-name>POITestservlet-name>
<servlet-class>tservlet-class>
servlet>
<servlet-mapping>
<servlet-name>POITestservlet-name>
<url-pattern>/POITesturl-pattern>
servlet-mapping>
<welcome-file-list>
<welcome-file>welcome-file>
welcome-file-list>
web-app>
(4)程序的运行结果如下:
第三种方法:如何使用JXL组件操作Excel
JXL组件介绍
JXL组件可从网址/jexcelapi/下载,下载后,将加入classpath,或者把
文件拷到工程目录的lib目录下,或者拷到Tomcat安装目录下的commonlib目录下。
读取Excel文档的思路是,先用一个输入流(InputStream)得到Excel文件,然后用JXL中的Workbook
得到工作簿。用些文件时,sheet从工作簿中得到工作表,用Cell得到工作表中得某个单元格。往Excel
中写入内容主要用包中的类。总体思路如下:
OutputStream<-WritableWorkook<-WritableSheet<-Label
这里面Label代表的是写入Sheet的Cell位置及内容。
InputStream->Workbook->Sheet->Cell
就得到了Excel文件中的单元格。
(1) 使用JXL组件实现Excel操作的确良JavaBean如下所示:
package myBean;
import .*;
import .*;
import jxl.*;
import .*;
import ection;
public class JXLExcel {
private DBConnection con;
public JXLExcel(){
con=new DBConnection();
}
public void exportExcel(String name,OutputStream os){
try{
WritableWorkbook wwb=Workbook.createWorkbook(os);
//一个是工作表的名称,另一个是工作表在工作薄中的位置
WritableSheet ws=Sheet(name,0);
l(new Label(0,1,"姓名"));
l(new Label(1,1,"电子邮件"));
ResultSet rs=con.execQuery("select name,email from db_user");
int nRow=1;
while(()){
l(new Label(0,nRow,ing("name")));
l(new Label(1,nRow,ing("email")));
nRow++;
}
();
();
}catch(Exception e){
System.out.println("Excel()"+sage());
}
}
}
(2)下面是用来调用该JavaBean实现JXL操作并生成Excel的JSP文件。文件名为代码如
下所示:
<%@ page language="java" contentType="text/html; charset=GB2312"
pageEncoding="GB2312"%>
<%@ page import="el"%>
DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB2312"> <title>使用JXL组件操作Exceltitle> head> <body> <% tentType("application/-excel"); JXLExcel excel=new JXLExcel(); Excel("user",putStream()); %> body> html> (3)程序的运行结果如下所示:


发布评论