使用jxl在IE中动态生成Excel文件,不在服务器上生成的Excel文件,下面是一个项目中实例,可根据个人需求自行修改:
ExcelManager.java类
import java.io.OutputStream;
import java.sql.ResultSet;
import jxl.Workbook;
import jxl.format.Colour;
import jxl.write.Label;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
public class ExcelManager {
// IE中动态生成Excel文件,不在服务器上生成的Excel文件
public static void writeExcel(OutputStream os, String[] titles, ResultSet rs)
throws Exception {
// 参数 response.getOutputStream()
// String[] titles = { "客户行业", "监控点个数", "用户帐号数" };
jxl.write.WritableFont wf = new jxl.write.WritableFont(
WritableFont.ARIAL, 11, WritableFont.NO_BOLD, false,
jxl.format.UnderlineStyle.NO_UNDERLINE);
// 设置标题风格
jxl.write.WritableCellFormat wcftitle = new jxl.write.WritableCellFormat(
wf);
jxl.write.WritableCellFormat wcf = new jxl.write.WritableCellFormat(wf);
// 设置背景颜色
wcftitle.setBackground(Colour.BRIGHT_GREEN);
WritableWorkbook wwb = Workbook.createWorkbook(os);
WritableSheet ws = wwb.createSheet("Sheet1", 0);
Label labelC = null;
// 写标题
for (int i = 0; i < titles.length; i++) {
labelC = new Label(i, 0, titles[i], wcftitle);
// 设置列宽
ws.setColumnView(i, 20);
ws.addCell(labelC);
}
// 设置行高
ws.setRowView(0, 400, false);
// 写数据
int j = 1;
while (rs.next()) {
for (int k = 0; k < titles.length; k++) {
String column = rs.getObject(k + 1).toString();
try {
// 添加整数
int columnInt = Integer.valueOf(column);
ws.addCell(new jxl.write.Number(k, j, columnInt, wcf));
} catch (NumberFormatException err) {
// 添加字符串
labelC = new Label(k, j, column, wcf);
ws.addCell(labelC);
}
}
// 设置行高
ws.setRowView(j, 400, false);
j++;
}
// 写入Exel工作表
wwb.write();
// 关闭Excel工作薄对象
wwb.close();
}
}
jsp中部分代码:
<%
response.reset();
response.setContentType("application/vnd.ms-excel");
String fileName = "报表.xls";
fileName = new String(fileName.getBytes("GBK"),"iso8859-1");
response.addHeader("Content-Disposition","attachment; filename="+fileName);
String[] titles = { "客户行业", "监控点个数", "用户帐号数" };
ResultSet rs = ......//查询数据库得到结果集,省略...
ExcelManager .writeExcel(response.getOutputStream(),titles ,rs);
//处理tomcat5下jsp出现getOutputStream() has already been called for this response异常
out.clear();
out=pageContext.pushBody();