<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 5,  comments - 7,  trackbacks - 0

    生成Excel并在客戶端下載的JSF實現(xiàn)
      Excel這個大家?guī)缀趺刻於加玫降墓ぞ撸瑸槲覀兊墓ぷ鲙砹藰O大的方便。在現(xiàn)在的B/S系統(tǒng)中,特別是很多大型的辦公系統(tǒng)中,大量的報表需要處理,導出EXCEL的功能就顯得尤為重要了。導出Excel已經(jīng)是相當成熟的技術(shù)了,但是在java中卻不是一件容易的事。特別是在JSF架構(gòu)的系統(tǒng)中,由于使用的人數(shù)和學習的資料都很少,實現(xiàn)導出Excel的功能也頗費周折。由于項目的需要,本人需要實現(xiàn)這樣的功能,經(jīng)過對大量代碼的改造,實現(xiàn)了JSF下的生成EXCEL并在客戶端實現(xiàn)下載的功能。下面的例子中,我用的是POI來生成Excel。Apache的Jakata項目的POI子項目,目標是處理ole2對象。 POI可以到 http://www.apache.org/dyn/closer.cgi/jakarta/poi/下載。 編譯好的jar主要有這樣4個:poi包,poi Browser包,poi hdf包,poi hssf例程包。實際運行時,需要有poi包就可以了。
      在下面的工具類中,我通過private static  void downloadFile(String strfileName)這個方法在生成EXCEL以后實現(xiàn)在客戶端的下載。在這個類中,這個方法就是經(jīng)過改造的JSF實現(xiàn)。不過這個工具類有個不足之處就是,傳遞給downloadFile(String strfileName)的文件名不支持中文,希望大家注意,也希望各位能給出解決辦法。

    package mj.util.excel; 
      
    import java.io.File; 
      
    import java.io.FileInputStream; 
      
    import java.io.FileOutputStream; 
      
    import java.io.IOException; 
      
    import java.util.List; 
      
    import javax.faces.context.FacesContext; 
      
    import javax.servlet.ServletContext; 
      
    import javax.servlet.ServletOutputStream; 
      
    import javax.servlet.http.HttpServletResponse; 
      
    import org.apache.poi.hssf.usermodel.HSSFCell; 
      
    import org.apache.poi.hssf.usermodel.HSSFCellStyle; 
      
    import org.apache.poi.hssf.usermodel.HSSFFont; 
      
    import org.apache.poi.hssf.usermodel.HSSFRow; 
      
    import org.apache.poi.hssf.usermodel.HSSFSheet; 
      
    import org.apache.poi.hssf.usermodel.HSSFWorkbook; 
      
    /** 
      * 本工具類解決了java到處Excel,并同時實現(xiàn)了客戶端下載 不足之處:下載方法傳入的文件名不支持中文 
      * 
      * 
    @author vincent 
      * 
      
    */
     
      
    public class ExcelUtils 
      
    private static String sheetName = "data"
      
    private HSSFWorkbook wb; 
      
    private HSSFSheet sheet; 
      
    private HSSFRow row; 
      
    private HSSFCell cell; 
      
    private HSSFFont font; 
      
    private HSSFCellStyle cellStyle; 
      
    private FileOutputStream fileOut; 
      
    public ExcelUtils() 
      wb 
    = new HSSFWorkbook(); 
      }
     
      
    /** 
      * 
    @param excelName 
      * excel名稱。 
      * 
    @param list 
      * 這個list里面存放的是對象數(shù)組。數(shù)組元素可以轉(zhuǎn)化為字符串顯示的。這個對象數(shù)組一般對應數(shù)據(jù)庫里的幾列。 
      * 
    @param firstRowValue 
      
    */
     
      
    public void outputExcel(String excelName, List list, String[] firstRowValue) 
      
    try 
      
    this.createSheet(firstRowValue); 
      
    this.setValueToRow(excelName, list); 
      }
     catch (Exception ex) 
      System.out.print(ex); 
      }
     
      
    // System.out.println("文件名是:" + excelName); 
      downloadFile(excelName); 
      }
     
      
    public void outputExcel(String excelName, List list) 
      
    try 
      
    this.setValueToRow(excelName, list); 
      }
     catch (Exception e) 
      
    // TODO: handle exception 
      }
     
      downloadFile(excelName); 
      }
     
      
    private void setValueToRow(String excelName, List list) 
      
    // 獲得JSF上下文環(huán)境 
      FacesContext context = FacesContext.getCurrentInstance(); 
      
    // 獲得ServletContext對象 
      ServletContext servletContext = (ServletContext) context 
      .getExternalContext().getContext(); 
      
    // 取得文件的絕對路徑 
      excelName = servletContext.getRealPath("/UploadFile"+ "/" + excelName; 
      System.out.println(
    "生成文件的路徑是:" + excelName); 
      Object[] obj; 
      
    try 
      
    for (int i = 0; i 
      row 
    = sheet.createRow(i + 1); 
      obj 
    = (Object[]) list.get(i); 
      
    this.createCell(row, obj); 
      }
     
      fileOut 
    = new FileOutputStream(excelName); 
      wb.write(fileOut); 
      }
     catch (Exception ex) 
      System.out.print(
    "生成報表有誤:" + ex); 
      }
     finally 
      
    try 
      fileOut.flush(); 
      fileOut.close(); 
      }
     catch (Exception e) 
      System.out.println(
    "ExcelUtil.setValueToRow()"); 
      }
     
      }
     
      }
     
      
    private void createSheet(String[] firstRowValue) 
      
    try 
      sheet 
    = wb.createSheet(ExcelUtils.sheetName); 
      row 
    = sheet.createRow(0); 
      font 
    = wb.createFont(); 
      font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); 
      cellStyle 
    = wb.createCellStyle(); 
      cellStyle.setFont(font); 
      
    for (int i = 0; i 
      cell 
    = row.createCell((short) i); 
      cell.setCellStyle(cellStyle); 
      cell.setEncoding(HSSFCell.ENCODING_UTF_16); 
      cell.setCellValue(firstRowValue[i]); 
      }
     
      }
     catch (Exception ex) 
      System.out.print(ex); 
      }
     
      } 
      
    private void createCell(HSSFRow row, Object[] obj) 
      
    try 
      
    for (int i = 0; i 
      cell 
    = row.createCell((short) i); 
      cell.setEncoding(HSSFCell.ENCODING_UTF_16); 
      cell.setCellValue(obj[i].toString()); 
      }
     
      }
     catch (Exception ex) 
      System.out.print(ex); 
      }
     
      } 
      
    /** 
      * 
      * 功能說明:根據(jù)提供的文件名下載文件,不支持中文文件名 
      * 
      * 此方法由yongtree添加,實現(xiàn)文件生成后的下載 
      * 
      * 
    @param strfileName 
      * String 
      * 
    @return void 
      
    */
     
      
    private static void downloadFile(String strfileName) 
      
    try 
      
    // 獲得JSF上下文環(huán)境 
      FacesContext context = FacesContext.getCurrentInstance(); 
      
    // 獲得ServletContext對象 
      ServletContext servletContext = (ServletContext) context 
      .getExternalContext().getContext(); 
      
    // 取得文件的絕對路徑 
      String excelName = servletContext.getRealPath("/UploadFile"+ "/" 
      
    + strfileName; 
      File exportFile 
    = new File(excelName); 
      HttpServletResponse httpServletResponse 
    = (HttpServletResponse) FacesContext 
      .getCurrentInstance().getExternalContext().getResponse(); 
      ServletOutputStream servletOutputStream 
    = httpServletResponse 
      .getOutputStream(); 
      httpServletResponse.setHeader(
    "Content-disposition"
      
    "attachment; filename=" + strfileName); 
      httpServletResponse.setContentLength((
    int) exportFile.length()); 
      httpServletResponse.setContentType(
    "application/x-download"); 
      
    // httpServletResponse.setContentType("application/vnd.ms-excel"); 
      byte[] b = new byte[1024]; 
      
    int i = 0
      FileInputStream fis 
    = new java.io.FileInputStream(exportFile); 
      
    while ((i = fis.read(b)) >0
      servletOutputStream.write(b, 
    0, i); 
      }
     
      }
     catch (IOException e) 
      e.printStackTrace(); 
      }
     
      FacesContext.getCurrentInstance().responseComplete(); 
      }
     
      } 
    posted on 2008-11-27 11:36 Vincent-chen 閱讀(608) 評論(0)  編輯  收藏 所屬分類: JSF
    主站蜘蛛池模板: 精品国产综合成人亚洲区| 亚洲精品成人av在线| 四虎免费影院4hu永久免费| 亚洲av无码不卡一区二区三区| 久久青青草原亚洲av无码app| 亚洲人成免费网站| 57pao一国产成永久免费| 亚洲国产精品久久久久| 免费无码又爽又刺激网站直播| 免费看黄网站在线看 | 国产免费一级高清淫曰本片| 四虎影视永久免费视频观看| 牛牛在线精品观看免费正| yellow视频免费在线观看| 毛片免费观看网站| 亚洲va成无码人在线观看| 国产精品自拍亚洲| 成在人线av无码免费高潮水| 国产亚洲婷婷香蕉久久精品| 久久综合给合久久国产免费| 亚洲香蕉久久一区二区| 好爽好紧好大的免费视频国产| 精品国产综合成人亚洲区| h视频在线观看免费完整版| 真人做A免费观看| 久久人午夜亚洲精品无码区| 啊灬啊灬别停啊灬用力啊免费看| 亚洲AV无码国产精品色午友在线| 亚洲中文无码永久免费| 免费看的黄色大片| 美美女高清毛片视频黄的一免费| 免费国产污网站在线观看15| 亚洲无吗在线视频| 亚洲国产婷婷综合在线精品| 国产一级片免费看| 亚洲性线免费观看视频成熟| 内射无码专区久久亚洲| 两个人看的www高清免费观看| 亚洲高清无码综合性爱视频| 中文字幕无码精品亚洲资源网久久 | 免费无码av片在线观看|