导出并下载 excel 转
package com.aa.bb.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import jxl.Workbook;
import jxl.format.UnderlineStyle;
import jxl.write.Label;
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;
public class ExcelUtil {
?
?public static File buildExcel(String reportname, String filename,
???List headlist, List datalist) throws Exception {
??File fileExcel = new File(filename);
??try {
???// 创建一个可写的工作本
???WritableWorkbook workbook = Workbook.createWorkbook(fileExcel);
???// 创建一个工作单
???WritableSheet sheet = workbook.createSheet(reportname, 0);
???// 创建文本样式
???WritableFont headerFont = new WritableFont(WritableFont.ARIAL, 12,
?????WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE,
?????jxl.format.Colour.BLACK);
???// 格式化文本头
???WritableCellFormat headerFormat = new WritableCellFormat(headerFont);
???// 创建文本样式
???WritableFont dataFont = new WritableFont(WritableFont.ARIAL, 10,
?????WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE,
?????jxl.format.Colour.BLACK);
???// 格式化文本
???WritableCellFormat dataFormat = new WritableCellFormat(dataFont);
???Label label = null;
???// 填充工作单的单元格(文本头)
???for (int i = 0; headlist != null && i < headlist.size(); i++) {
????String head = (String) headlist.get(i);
????label = new Label(i, 0, head, headerFormat);
????sheet.addCell(label);
???}
???// 动态填充数据
???for (int i = 0; datalist != null && i < datalist.size(); i++) {
????List recordfield = (List) datalist.get(i);
????for (int j = 0; j < recordfield.size(); j++) {
?????label = new Label(j, i + 1, (String) recordfield.get(j),dataFormat);
?????sheet.addCell(label);
????}
???}
???workbook.write();
???workbook.close();
??} catch (RowsExceededException e) {
???e.printStackTrace();
??} catch (WriteException e) {
???e.printStackTrace();
??} catch (IOException e) {
???e.printStackTrace();
??}
??return fileExcel;
?}
?
?public static void downLoadExcel(HttpServletResponse response,
???File fileExcel, String filename) {
??try {
???// 往客户端输出的流
???ServletOutputStream out = response.getOutputStream();
???// 输入流
???FileInputStream hFile = new FileInputStream(fileExcel);
???// System.out.println("hFile="+hFile.available());
???// 创建一个hFile大小的字节型数组
???byte[] data = new byte[hFile.available()];
???// 头信息的编码默认为ISO-8859-1,把文件名转成默认编码传递
???filename = new String((filename + ".xls").getBytes(), "ISO-8859-1");
???// 头信息
???response.addHeader("Content-Disposition", "attachment; filename="
?????+ filename);
???System.out.println("filename=" + filename);
???// 头信息
???response.addIntHeader("Content-Length", hFile.available());
???// 读数据到数组
???hFile.read(data);
???// 记得要关闭输入流
???hFile.close();
???response.setContentType("application/vnd.ms-excel;charset=UTF-8");
???out.write(data);
???out.close();
??} catch (IOException e) {
???e.printStackTrace();
??} finally {
???// 删除文件
???fileExcel.delete();
??}
?}
}
public void export() throws Exception{
??Debug.println("开始导出Excel...");
??
??//先从session中取,如果没有,则重新查询
??List ls_query=(List)request.getSession().getAttribute("fluxqueryresult");
??if(ls_query==null){
? ?RealtimeParam rp=prepareQuery(); //参数准备? ?
? ?ls_query=this.queryFlux(rp);
??}
??
??List ls_data =new Vector(); //excel 的表身数据
??Vector v_record=null;
??RealtimeMap rm=null;
??//重整数据
??for(int i=0;i<ls_query.size();i++){
? ?v_record=new Vector();
? ?rm=(RealtimeMap)ls_query.get(i);
? ?
? ?v_record.add(""+(i+1));
? ?v_record.add(rm.getRealtime());
? ?v_record.add(""+rm.getId());
? ?v_record.add(rm.getAddupflux());
? ?v_record.add(rm.getFluxa());
? ?v_record.add(rm.getFlux());? ?
? ?v_record.add(rm.getInstalladdr());
? ?
? ?ls_data.add(v_record);
??}
??
??Vector v_head=new Vector(); //excel 的表头
??v_head.add("行号");
??v_head.add("时间");
??v_head.add("设备编号");
??v_head.add("累计流量");
??v_head.add("间隔流量");
??v_head.add("瞬时流量");
??v_head.add("安装地点");??
??
??Debug.println("excel....1");
??
??File f=ExcelUtil.buildExcel("流量查询","report_"+request.getSession().getId(),v_head,ls_data);
??Debug.println("excel....2");
??
??ExcelUtil.downLoadExcel(response,f,"fname");
??
??this.setTemplateName("temp.ftl");
}