poI 以Excel導出數據

  1. 導入POI相關jar包,參考 http://zhuws.blog.51cto.com/11134439/1973698 

其中有下載POI連接地址,和下載圖示.

2.步入正題,看代碼

    

// 大致思路,先看本地文件存在不,如果不存在,把查詢數據導出到Excel,然後再下載 代碼有點亂

String filePath = request.getParameter("filePath");
filePath = new String( filePath.getBytes("iso-8859-1"), "UTF-8");
File filetemp = null;
byte[] fileContent = null;
filetemp = new File(filePath);
// 如果文件不存在 
if(!filetemp.exists()){
String title = "序號,統一社會信用代碼或組織機構代碼,企業名稱,發證機關,獲獎內容,發證日期,有效日期";
String key = ",ZZJGDM,QYMC,FZJG,HJNR,KSRQ,JSRQ";

String[] titles = title.split(",");
String[] keys = key.split(",");
			
   //-------------------POI保存數據到Excel----------------------// 
   // 第一步,創建Excel 工作薄對象
  HSSFWorkbook wb = new HSSFWorkbook();  
 // 第二步,創建Excel 工作表對象 
  HSSFSheet sheet = wb.createSheet("sheet1");
 // 設置表格默認列寬度爲 30個 字節
  sheet.setDefaultColumnWidth((short)15);
// 設置樣式 
HSSFCellStyle style = wb.createCellStyle();  
 style.setFillForegroundColor(HSSFColor.SKY_BLUE.index);
 			
 //合併單元格  
 HSSFRow rows = sheet.createRow(0);
 // 0,1,0,titles.length-1 表示合併 第1,2行 從左邊0列開始 到 titles.length-1 列結束
 CellRangeAddress region = new CellRangeAddress(0,1,0,titles.length-1);
 sheet.addMergedRegion(region);
 rows.createCell((short) 0).setCellValue(fileName);
 			
// 創建 表格 標題欄 
HSSFRow row = sheet.createRow(2);
for(int i=0;i<titles.length;i++){
    HSSFCell cell = row.createCell(i);
    cell.setCellStyle(style);
    HSSFRichTextString text = new HSSFRichTextString(titles[i]);
    cell.setCellValue(text); 
}
	        
// 第五步, 假設 list是想要導出的數據
for(int i=0;i<list.size();i++){
        HashMap map =(HashMap)list.get(i); // 轉換爲HashMap 
        row = sheet.createRow(i+3); // 從第幾行開始寫入數據 
	for(int j = 0;j < keys.length;j++){
        if(j==0){
        	row.createCell((short) 0).setCellValue(i+1);
			continue;	        			
        }
        // 日期格式處理 ,對日期截取後 例如: 2017-11-08
        if("KSRQ".equals(keys[j])||"JSRQ".equals(keys[j])){
            String str = map.get(keys[j])==null?"":map.get(keys[j])+"";
            if(!"".equals(str)){
	        row.createCell((short) j).setCellValue(str.substring(0,10));
            }
        }else if("XZXKFL".equals(keys[j])&&"51".equals(lx)){
            row.createCell((short) j).setCellValue("食品相關產品");	
        }else{
            row.createCell((short) j).setCellValue(map.get(keys[j])==null?"":map.get(keys[j])+"");
        }
     }
} 

// 文件命名 
Calendar calendar = Calendar.getInstance();  
calendar.add(Calendar.DATE, 0);  
int year1 = calendar.get(Calendar.YEAR);// 月份  
int month1 = calendar.get(Calendar.MONTH) + 1;// 日期  
int date1 = calendar.get(Calendar.DATE);  
String d1 = year1 + "-" + month1 + "-" + date1;//2017-2-4
//拿到 事先定義好的靜態變量 就是 所謂的二級目錄 也是路徑的一部分
//拼接路徑 並且 創建文件夾
filePath = "D:\Zlxypt";
File dir = new File(filePath+year1+"/"+d1); //D:/Zlxypt/2017年/2017-2-4
if(!dir.exists()){
    dir.mkdirs();
}
String uuid = year1+UUID.randomUUID().toString();
String file_Name = year1+"/"+ d1 +"/" +uuid+".xls";
filePath += file_Name; //文件全路徑名稱 
// 更新 title 發佈表 filePath
titleServices.updaTitleById(tid, file_Name);
 // 第六步,將文件存到指定位置  
try {
	FileOutputStream fout = new FileOutputStream(filePath); 
	wb.write(fout);  // 把數據寫入 excel中
	fout.close();  
	wb.close();
} catch (Exception e)  {  
    e.printStackTrace();  
}  
	
	
//-----------------下載
filePath= new String( filePath.getBytes("iso-8859-1"), "UTF-8");
filetemp = new File(filePath);
fileContent = FileUtil.getBytes(filetemp);
fileName += ".xls";
	
response.setHeader("Content-Disposition","attachment; filename=" + new String(fileName.getBytes("utf-8"), "iso-8859-1"));
response.getOutputStream().write(fileContent,0,fileContent.length);
response.getOutputStream().flush();
response.getOutputStream().close();
out.clear();
out = pageContext.pushBody();

        	


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章