將List導出到excel

有的時候由於咱們須要將頁面上的表格數據導出到Excel表。咱們能夠寫一個導出的java接口。java

這個接口先在服務器上寫一份Excel文件,而後再寫一份到用戶這。至於爲何要如今服務器上先寫一份,多是爲了備份啥的把。。。web

這個接口須要的參數有:服務器

1.查詢須要導出的List數據的條件參數dom

2.HttpServletRequest編碼

3.HttpServletResponseexcel

下面是邏輯code

String filename = new RandomGUID.getUUID32() + ".xls";
//在服務器上建立一個exportexcel文件夾(若是這個exportexcel文件夾不存在的話)
String dirpath = request.getSession().getServletContext().getRealPath("/") + "exportexcel";
File dir = new File(dirpath);
if(!dir.exists)
    dir.mkdirs();//若是目標文件夾不存在則建立新的文件夾
String fileuri = dirpath + File.separator + filename;
//假設咱們已經經過接口的第一個參數獲取到要導出的List數據了,這裏暫定list
//設置表頭
String btList[] = {"編號", "姓名", "年齡"};
//第一步,建立一個webbook,對應一個Excel文件
HSSWorkbook wb = new HSSWorkbook();
//第二步,在webook中添加一個sheet,對應Excel文件中的sheet
HSSFSheet sheet = wb.createSheet();
//第三步,在sheet中添加表頭第0行,注意老版本poi對Excel的行數列數有限制short
HSSFRow row = sheet.createRow((int) 0);
//第四步,建立單元格,並設置表頭 設置表頭居中
HSSFCellStyle style = wb.createCellStyle();
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//建立一個居中格式
for(short i = 0; i < (short) btList.length; i++){
    HSSFCell cell = row.createCell((short) i);
    cell.setCellValue(btList[i]);
    cell.setCellStyle(style);
}
//設置背景顏色
style.setFillBackGroundColor(Font.COLOR_NORMAL);
int j = 1;//記錄行數
//下面遍歷list,將數據寫在每一列上
for(int i = 0; i < list.size(); i++){
    //建立一行
    HSSFRow datarow = sheet.createRow((int) j);
    //建立這行的一格
    HSSFCell cell0 = datarow.createCell(0);
    //將值寫入這一格
    cell0.setCellValue(寫表頭裏面第一個字段也就是編號的值);
    cell0.setCellStyle(style);//設置該單元格的格式
    //寫這一行的其餘格子同理
    ...
    j++;
}
//將webbook的內容寫入服務器那個文件裏
FileOutputStream fout = new FileOutputStream(fileuri);
wb.write(fout);
fout.close();
/**到這裏,數據已經導出到服務器上的fileuri路徑下了**/
/**下面作的就是至關於把服務器上的文件下載下來**/
//設置下載的文件名字以及編碼格式
String name = new String("信息.xls".getBytes("UTF-8"), "ISO-8859-1");
response.setHeader("Content-Disposition", "attachment:filename=" + name);
InputStream in = new FileInputStream(new File(fileuri));
OutputStream out = response.getOutputStream();
int b;
while((b = in.read() != -1){
    out.write(b);
}
in.close();
out.close();