上篇中介绍的是jxl解析导入的excel中的数据,接下来介绍生成excel并导出数据到excel中。
导出的步骤大致可概括为:
1. 通过Workbook类创建一个可写入的工作簿对象(WritableWorkbook)
2. 创建工作表sheet
3. 往sheet中填充数据(填充数据时,jxl提供了String、Number、Boolean、DataTime几种数据类型.在excel单元格有值的情况下,默认的是label类型)
4. 将缓存中的数据写入Excel工作簿
5. 关闭Excel工作簿
public void exportExcel() throws Exception {
HttpServletResponse response=ServletActionContext.getResponse();
// 设置excel文件名
String excelName = new SimpleDateFormat("yyyyMMddhhmmss").format(
new Date()).toString();
// 设置response头信息
response.reset();
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition", "attachment; filename="
+ excelName + ".xls");
// 创建工作簿并发送到浏览器
try {
OutputStream out = response.getOutputStream();
//1. 创建一个可编辑的工作簿
WritableWorkbook wwb = Workbook.createWorkbook(out);
//2. 创建一个工作表
WritableSheet ws = wwb.createSheet("sheet1", 0);
//3. 往sheet中填充数据
//第一行第一列填充string类型,第一行第二列填充numer类型,第三列填充boolean,第四列填充时间
Label label = new Label(0,0,"string title");//参数分别为列、行、值
Number number = new Number(1,0,1);
Boolean labelB = new Boolean(2,0,false);
DateTime labelDT = new DateTime(3,0,new java.util.Date());
ws.addCell(label);
ws.addCell(number);
ws.addCell(labelB);
ws.addCell(labelDT);
//4. 将缓存中的内容写入Excel工作簿
wwb.write();
//5. 关闭Excel工作簿
wwb.close();
} catch (Exception e) {
e.printStackTrace();
throw new Exception("导出Excel失败");
}
}
导出的excel,除了设置数据类型外,还可以设置单元格格式。
//设置(0,0)单元格为Label类型,设置字体、字号、颜色、内容
WritableFont wf = new WritableFont(WritableFont.ARIAL,10,WritableFont.BOLD,false,UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.RED);
WritableCellFormat wcff = new WritableCellFormat(wf);
Label label = new Label(0,0,"string title",wcff);
ws.addCell(label);
//设置(0,1)单元格为Number类型,样式精确到0.01
NumberFormat nf = new NumberFormat("#.##");
WritableCellFormat wcfN = new WritableCellFormat(nf);
Number labelNF = new Number(1, 0, 3.1415926, wcfN);
ws.addCell(labelNF);
//设置(0.2)单元格为Boolean类型
Boolean labelB = new Boolean(2,0,false);
ws.addCell(labelB);
//设置(0,3)单元格为DataTime类型,格式为dd MM yyyy hh:mm:ss
jxl.write.DateFormat df = new jxl.write.DateFormat("dd MM yyyy hh:mm:ss");
jxl.write.WritableCellFormat wcfDF = new jxl.write.WritableCellFormat(df);
jxl.write.DateTime labelDTF = new jxl.write.DateTime(3, 0, new java.util.Date(),
wcfDF);
ws.addCell(labelDTF);
这样,导出的excel就是经过样式修饰的了。