`
564615061
  • 浏览: 12330 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

导出并下载 excel 转

    博客分类:
  • Java
阅读更多

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");
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics