jxl操作Excel简单封装
2008-10-20 16:57
344 查看
很多时候我们都会去操作一下excel文件,或者将数据专为excel供用户下载。
用的最多的就是将
一个报表生成excel文件供用户下载。而报表基本上就是标题,标题下显示内容。
如果你的报表也是这样的,就能用下面的类方便的生成excel文件,并输出到用户端。
view plaincopy to clipboardprint?
/**
*
*/
package
com.royalstone.workbook;
import
java.io.IOException;
import
java.io.OutputStream;
import
java.sql.ResultSet;
import
java.sql.ResultSetMetaData;
import
java.sql.SQLException;
import
java.sql.Types;
import
javax.servlet.http.HttpServletResponse;
import
jxl.write.DateTime;
import
jxl.write.Label;
import
jxl.write.WritableCell;
import
jxl.write.WritableCellFormat;
import
jxl.write.WritableFont;
import
jxl.write.WritableSheet;
import
jxl.write.WritableWorkbook;
import
jxl.write.WriteException;
import
jxl.write.biff.RowsExceededException;
import
com.royalstone.util.daemon.LangAdapter;
/**
* @author 造币机器
* 为兼容以前的excel导入而写的替代类
*/
public class Workbook {
public
Workbook(OutputStream os) throws
IOException{
book = jxl.Workbook.createWorkbook(os);
}
/**
* 增加一个工作表格
* @param rs 记录结果集
* @param sheetName 表格名
* @param title 标题
* @throws RowsExceededException
* @throws WriteException
* @throws SQLException
*/
public
void addSheet(ResultSet rs, String
sheetName, String[] title) throws
RowsExceededException, WriteException, SQLException{
WritableSheet sheet = book.createSheet(sheetName,
sheetCount++);
addTitle(title, sheet);
addBody(rs, sheet);
}
/**
* 输出到客户端
* @param response 这个就不详细解释了
* @param fileName 客户下载时的文件名
* @throws IOException
* @throws WriteException
*/
public
void output(HttpServletResponse
response,String fileName) throws
IOException, WriteException{
response.reset();
response.setContentType( "application/vnd.ms-excel" );
response.setHeader( "Content-disposition", "attachment; filename=" + fileName );
book.write();
book.close();
}
/**
* 添加标题
* @param title
* @param sheet
* @throws RowsExceededException
* @throws WriteException
*/
private
void addTitle(String[]
title,WritableSheet sheet) throws
RowsExceededException, WriteException{
for
(int i = 0; i < title.length; i++) {
Label label=new Label(i,0,title[i],formatTitle);
sheet.addCell(label);
}
}
/**
* 添加主体内容
* @param rs
* @param sheet
* @throws SQLException
* @throws RowsExceededException
* @throws WriteException
*/
private
void addBody(ResultSet rs,WritableSheet
sheet) throws SQLException,
RowsExceededException, WriteException{
ResultSetMetaData meta = rs.getMetaData();
int row =
1;
while(rs.next()){
for(int
i=1;i<=meta.getColumnCount();i++){
sheet.addCell((WritableCell)
parseMetaData(rs, meta, i, row));
}
row++;
}
}
/**
* 根据字段类型自动生成格式
* @param rs
* @param meta
* @param col
* @param row
* @return
* @throws SQLException
*/
private Object
parseMetaData(ResultSet rs,ResultSetMetaData meta,int col,int
row) throws SQLException{
Object o = null;
switch(meta.getColumnType(col)){
case
Types.DATE:
case
Types.TIME:
case
Types.TIMESTAMP:
o = new
DateTime(col-1,row,rs.getDate(col),formatDate);
break;
case
Types.DECIMAL:
case
Types.DOUBLE:
o = new
jxl.write.Number(col-1,row,rs.getDouble(col),formatNumber);
break;
case
Types.SMALLINT:
case
Types.INTEGER:
case
Types.NUMERIC:
o = new
jxl.write.Number(col-1,row,rs.getInt(col),formatNumber);
break;
default:
o = new
Label(col-1,row,adapter.fromLocal(rs.getString(col)));
}
return o;
}
final
private LangAdapter adapter =
new LangAdapter();
private
int sheetCount=0;
private
WritableWorkbook book ;
final
static WritableCellFormat
formatTitle=new
WritableCellFormat(new
WritableFont(WritableFont.COURIER,12,WritableFont.BOLD));
final
static WritableCellFormat
formatNumber=new
WritableCellFormat(new
WritableFont(WritableFont.TAHOMA,10));
final
static WritableCellFormat
formatDate=new
WritableCellFormat(new
WritableFont(WritableFont.TIMES,10));
}
/**
*
*/
package com.royalstone.workbook;
import java.io.IOException;
import java.io.OutputStream;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Types;
import javax.servlet.http.HttpServletResponse;
import jxl.write.DateTime;
import jxl.write.Label;
import jxl.write.WritableCell;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
import com.royalstone.util.daemon.LangAdapter;
/**
* @author 造币机器
* 为兼容以前的excel导入而写的替代类
*/
public class Workbook {
public Workbook(OutputStream os) throws IOException{
book = jxl.Workbook.createWorkbook(os);
}
/**
* 增加一个工作表格
* @param rs 记录结果集
* @param sheetName 表格名
* @param title 标题
* @throws RowsExceededException
* @throws WriteException
* @throws SQLException
*/
public void addSheet(ResultSet rs, String sheetName, String[] title) throws RowsExceededException, WriteException, SQLException{
WritableSheet sheet = book.createSheet(sheetName, sheetCount++);
addTitle(title, sheet);
addBody(rs, sheet);
}
/**
* 输出到客户端
* @param response 这个就不详细解释了
* @param fileName 客户下载时的文件名
* @throws IOException
* @throws WriteException
*/
public void output(HttpServletResponse response,String fileName) throws IOException, WriteException{
response.reset();
response.setContentType( "application/vnd.ms-excel" );
response.setHeader( "Content-disposition", "attachment; filename=" + fileName );
book.write();
book.close();
}
/**
* 添加标题
* @param title
* @param sheet
* @throws RowsExceededException
* @throws WriteException
*/
private void addTitle(String[] title,WritableSheet sheet) throws RowsExceededException, WriteException{
for (int i = 0; i < title.length; i++) {
Label label=new Label(i,0,title[i],formatTitle);
sheet.addCell(label);
}
}
/**
* 添加主体内容
* @param rs
* @param sheet
* @throws SQLException
* @throws RowsExceededException
* @throws WriteException
*/
private void addBody(ResultSet rs,WritableSheet sheet) throws SQLException, RowsExceededException, WriteException{
ResultSetMetaData meta = rs.getMetaData();
int row = 1;
while(rs.next()){
for(int i=1;i<=meta.getColumnCount();i++){
sheet.addCell((WritableCell) parseMetaData(rs, meta, i, row));
}
row++;
}
}
/**
* 根据字段类型自动生成格式
* @param rs
* @param meta
* @param col
* @param row
* @return
* @throws SQLException
*/
private Object parseMetaData(ResultSet rs,ResultSetMetaData meta,int col,int row) throws SQLException{
Object o = null;
switch(meta.getColumnType(col)){
case Types.DATE:
case Types.TIME:
case Types.TIMESTAMP:
o = new DateTime(col-1,row,rs.getDate(col),formatDate);
break;
case Types.DECIMAL:
case Types.DOUBLE:
o = new jxl.write.Number(col-1,row,rs.getDouble(col),formatNumber);
break;
case Types.SMALLINT:
case Types.INTEGER:
case Types.NUMERIC:
o = new jxl.write.Number(col-1,row,rs.getInt(col),formatNumber);
break;
default:
o = new Label(col-1,row,adapter.fromLocal(rs.getString(col)));
}
return o;
}
final private LangAdapter adapter = new LangAdapter();
private int sheetCount=0;
private WritableWorkbook book ;
final static WritableCellFormat formatTitle=new WritableCellFormat(new WritableFont(WritableFont.COURIER,12,WritableFont.BOLD));
final static WritableCellFormat formatNumber=new WritableCellFormat(new WritableFont(WritableFont.TAHOMA,10));
final static WritableCellFormat formatDate=new WritableCellFormat(new WritableFont(WritableFont.TIMES,10));
}
用的最多的就是将
一个报表生成excel文件供用户下载。而报表基本上就是标题,标题下显示内容。
如果你的报表也是这样的,就能用下面的类方便的生成excel文件,并输出到用户端。
view plaincopy to clipboardprint?
/**
*
*/
package
com.royalstone.workbook;
import
java.io.IOException;
import
java.io.OutputStream;
import
java.sql.ResultSet;
import
java.sql.ResultSetMetaData;
import
java.sql.SQLException;
import
java.sql.Types;
import
javax.servlet.http.HttpServletResponse;
import
jxl.write.DateTime;
import
jxl.write.Label;
import
jxl.write.WritableCell;
import
jxl.write.WritableCellFormat;
import
jxl.write.WritableFont;
import
jxl.write.WritableSheet;
import
jxl.write.WritableWorkbook;
import
jxl.write.WriteException;
import
jxl.write.biff.RowsExceededException;
import
com.royalstone.util.daemon.LangAdapter;
/**
* @author 造币机器
* 为兼容以前的excel导入而写的替代类
*/
public class Workbook {
public
Workbook(OutputStream os) throws
IOException{
book = jxl.Workbook.createWorkbook(os);
}
/**
* 增加一个工作表格
* @param rs 记录结果集
* @param sheetName 表格名
* @param title 标题
* @throws RowsExceededException
* @throws WriteException
* @throws SQLException
*/
public
void addSheet(ResultSet rs, String
sheetName, String[] title) throws
RowsExceededException, WriteException, SQLException{
WritableSheet sheet = book.createSheet(sheetName,
sheetCount++);
addTitle(title, sheet);
addBody(rs, sheet);
}
/**
* 输出到客户端
* @param response 这个就不详细解释了
* @param fileName 客户下载时的文件名
* @throws IOException
* @throws WriteException
*/
public
void output(HttpServletResponse
response,String fileName) throws
IOException, WriteException{
response.reset();
response.setContentType( "application/vnd.ms-excel" );
response.setHeader( "Content-disposition", "attachment; filename=" + fileName );
book.write();
book.close();
}
/**
* 添加标题
* @param title
* @param sheet
* @throws RowsExceededException
* @throws WriteException
*/
private
void addTitle(String[]
title,WritableSheet sheet) throws
RowsExceededException, WriteException{
for
(int i = 0; i < title.length; i++) {
Label label=new Label(i,0,title[i],formatTitle);
sheet.addCell(label);
}
}
/**
* 添加主体内容
* @param rs
* @param sheet
* @throws SQLException
* @throws RowsExceededException
* @throws WriteException
*/
private
void addBody(ResultSet rs,WritableSheet
sheet) throws SQLException,
RowsExceededException, WriteException{
ResultSetMetaData meta = rs.getMetaData();
int row =
1;
while(rs.next()){
for(int
i=1;i<=meta.getColumnCount();i++){
sheet.addCell((WritableCell)
parseMetaData(rs, meta, i, row));
}
row++;
}
}
/**
* 根据字段类型自动生成格式
* @param rs
* @param meta
* @param col
* @param row
* @return
* @throws SQLException
*/
private Object
parseMetaData(ResultSet rs,ResultSetMetaData meta,int col,int
row) throws SQLException{
Object o = null;
switch(meta.getColumnType(col)){
case
Types.DATE:
case
Types.TIME:
case
Types.TIMESTAMP:
o = new
DateTime(col-1,row,rs.getDate(col),formatDate);
break;
case
Types.DECIMAL:
case
Types.DOUBLE:
o = new
jxl.write.Number(col-1,row,rs.getDouble(col),formatNumber);
break;
case
Types.SMALLINT:
case
Types.INTEGER:
case
Types.NUMERIC:
o = new
jxl.write.Number(col-1,row,rs.getInt(col),formatNumber);
break;
default:
o = new
Label(col-1,row,adapter.fromLocal(rs.getString(col)));
}
return o;
}
final
private LangAdapter adapter =
new LangAdapter();
private
int sheetCount=0;
private
WritableWorkbook book ;
final
static WritableCellFormat
formatTitle=new
WritableCellFormat(new
WritableFont(WritableFont.COURIER,12,WritableFont.BOLD));
final
static WritableCellFormat
formatNumber=new
WritableCellFormat(new
WritableFont(WritableFont.TAHOMA,10));
final
static WritableCellFormat
formatDate=new
WritableCellFormat(new
WritableFont(WritableFont.TIMES,10));
}
/**
*
*/
package com.royalstone.workbook;
import java.io.IOException;
import java.io.OutputStream;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Types;
import javax.servlet.http.HttpServletResponse;
import jxl.write.DateTime;
import jxl.write.Label;
import jxl.write.WritableCell;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
import com.royalstone.util.daemon.LangAdapter;
/**
* @author 造币机器
* 为兼容以前的excel导入而写的替代类
*/
public class Workbook {
public Workbook(OutputStream os) throws IOException{
book = jxl.Workbook.createWorkbook(os);
}
/**
* 增加一个工作表格
* @param rs 记录结果集
* @param sheetName 表格名
* @param title 标题
* @throws RowsExceededException
* @throws WriteException
* @throws SQLException
*/
public void addSheet(ResultSet rs, String sheetName, String[] title) throws RowsExceededException, WriteException, SQLException{
WritableSheet sheet = book.createSheet(sheetName, sheetCount++);
addTitle(title, sheet);
addBody(rs, sheet);
}
/**
* 输出到客户端
* @param response 这个就不详细解释了
* @param fileName 客户下载时的文件名
* @throws IOException
* @throws WriteException
*/
public void output(HttpServletResponse response,String fileName) throws IOException, WriteException{
response.reset();
response.setContentType( "application/vnd.ms-excel" );
response.setHeader( "Content-disposition", "attachment; filename=" + fileName );
book.write();
book.close();
}
/**
* 添加标题
* @param title
* @param sheet
* @throws RowsExceededException
* @throws WriteException
*/
private void addTitle(String[] title,WritableSheet sheet) throws RowsExceededException, WriteException{
for (int i = 0; i < title.length; i++) {
Label label=new Label(i,0,title[i],formatTitle);
sheet.addCell(label);
}
}
/**
* 添加主体内容
* @param rs
* @param sheet
* @throws SQLException
* @throws RowsExceededException
* @throws WriteException
*/
private void addBody(ResultSet rs,WritableSheet sheet) throws SQLException, RowsExceededException, WriteException{
ResultSetMetaData meta = rs.getMetaData();
int row = 1;
while(rs.next()){
for(int i=1;i<=meta.getColumnCount();i++){
sheet.addCell((WritableCell) parseMetaData(rs, meta, i, row));
}
row++;
}
}
/**
* 根据字段类型自动生成格式
* @param rs
* @param meta
* @param col
* @param row
* @return
* @throws SQLException
*/
private Object parseMetaData(ResultSet rs,ResultSetMetaData meta,int col,int row) throws SQLException{
Object o = null;
switch(meta.getColumnType(col)){
case Types.DATE:
case Types.TIME:
case Types.TIMESTAMP:
o = new DateTime(col-1,row,rs.getDate(col),formatDate);
break;
case Types.DECIMAL:
case Types.DOUBLE:
o = new jxl.write.Number(col-1,row,rs.getDouble(col),formatNumber);
break;
case Types.SMALLINT:
case Types.INTEGER:
case Types.NUMERIC:
o = new jxl.write.Number(col-1,row,rs.getInt(col),formatNumber);
break;
default:
o = new Label(col-1,row,adapter.fromLocal(rs.getString(col)));
}
return o;
}
final private LangAdapter adapter = new LangAdapter();
private int sheetCount=0;
private WritableWorkbook book ;
final static WritableCellFormat formatTitle=new WritableCellFormat(new WritableFont(WritableFont.COURIER,12,WritableFont.BOLD));
final static WritableCellFormat formatNumber=new WritableCellFormat(new WritableFont(WritableFont.TAHOMA,10));
final static WritableCellFormat formatDate=new WritableCellFormat(new WritableFont(WritableFont.TIMES,10));
}
相关文章推荐
- JXL.jar简单封装Excel读写操作
- JXL.jar简单封装Excel读写操作
- JXL.jar简单封装Excel读写操作
- JXL(针对Excel操作)系列之五:简单的(WEB)导入操作
- Jxl.jar包对Excel文档进行简单操作
- excelpanel--extjs中嵌入excel,并封装简单操作
- java通过jxl对Excel进行简单操作
- 简单地使用jxl进行操作excel例子
- jxl操作excel简单学习
- 使用jxl读写excel(jxl操作excel)的简单例子
- C#读写EXCEL操作的简单封装
- 简单jxl操作之jsp下载Excel
- java使用jxl简单操作Excel
- 基于POI的简单EXCEL操作封装
- 使用jxl读写excel(jxl操作excel)的简单例子
- JXL(针对Excel操作)系列之一:最简单的导出操作(main
- JXL(针对Excel操作)系列之二:最简单的导入操作(main)
- 使用jxl读写excel(jxl操作excel)的简单例子
- 简单jxl的Excel读写操作
- java中Excel操作的简单封装