2023年11月28日发(作者:)

使用JSP操作Excel

第一种方法:静态方法生成WordExcel文档

要使JSP网页以WordExcel格式打开,只需要利用Page指令的contentType属性。ContentType设置

ContentType报头,标明即将发送到客户端程序的文档的MIME类型。浏览器根据这个MIME类型,以相应

的方式打开网页。JSP默认的MIME类型是text/html,这时经普通HTML的方式呈现网页内容。要将网页以

WorkExcel方式打开,则要告诉浏览器MIME类型为WordExcel

Word页面需要在JSP文件头设置如下指令。

<%@ page contentType=application/msword;charset=GBK%>

Excel页面需要在JSP文件头设置如下指令

<%@ page contentType=application/-excel;charset=GBK%>

第二种方法:如何使用POI组件操作Excel

可以通过设置响头ContentType达到以Excel文档形式输出的目的。

POI组件介绍

ApacheJakata项目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文件的一页。

在创建了页对象之后,就可以向该页中添加内容了。POIExcel文件页面中的每行用HSSFRow

表示,而每个单元格用HSFFCell对象来表示。向页面添加内容时,首先创建行,然后再创建行所包含的

单元格,设置单元格的数据。向行中添加单元格时,行的列是以0开始进行索引的。

语句oding(NG_UTF_16)用来说明单元格中的数据的编码是UTF-16,以

便处理汉字,否则默认编码不能识别汉字,将会出现乱码。

最后调用HSSFWorkbookwrite方法输出添加好内容的Excel文件。

POI提供的类和方法很丰富,远不止这里用到的,在进行实际开发时还需要参考相关的手册。

下面是用来调用该Servlet实现POI操作并生成ExcelServlet代码,文件名为

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代表的是写入SheetCell位置及内容。

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操作并生成ExcelJSP文件。文件名为代码如

下所示:

<%@ 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)程序的运行结果如下所示: