<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實現
      Excel這個大家幾乎每天都用到的工具,為我們的工作帶來了極大的方便。在現在的B/S系統中,特別是很多大型的辦公系統中,大量的報表需要處理,導出EXCEL的功能就顯得尤為重要了。導出Excel已經是相當成熟的技術了,但是在java中卻不是一件容易的事。特別是在JSF架構的系統中,由于使用的人數和學習的資料都很少,實現導出Excel的功能也頗費周折。由于項目的需要,本人需要實現這樣的功能,經過對大量代碼的改造,實現了JSF下的生成EXCEL并在客戶端實現下載的功能。下面的例子中,我用的是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以后實現在客戶端的下載。在這個類中,這個方法就是經過改造的JSF實現。不過這個工具類有個不足之處就是,傳遞給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,并同時實現了客戶端下載 不足之處:下載方法傳入的文件名不支持中文 
      * 
      * 
    @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里面存放的是對象數組。數組元素可以轉化為字符串顯示的。這個對象數組一般對應數據庫里的幾列。 
      * 
    @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上下文環境 
      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); 
      }
     
      } 
      
    /** 
      * 
      * 功能說明:根據提供的文件名下載文件,不支持中文文件名 
      * 
      * 此方法由yongtree添加,實現文件生成后的下載 
      * 
      * 
    @param strfileName 
      * String 
      * 
    @return void 
      
    */
     
      
    private static void downloadFile(String strfileName) 
      
    try 
      
    // 獲得JSF上下文環境 
      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 閱讀(610) 評論(0)  編輯  收藏 所屬分類: JSF
    主站蜘蛛池模板: 免费观看日本污污ww网站一区| 一级成人毛片免费观看| 四虎永久在线观看免费网站网址 | 亚洲阿v天堂在线| 本道天堂成在人线av无码免费| 免费吃奶摸下激烈视频| 猫咪免费观看人成网站在线| 久草免费手机视频| 亚洲av无码成h人动漫无遮挡 | 91在线手机精品免费观看| 亚洲视频在线播放| 青青在线久青草免费观看| 中文字幕亚洲精品无码| 好湿好大好紧好爽免费视频| 亚洲精品乱码久久久久久按摩 | 亚洲天然素人无码专区| 日本xxwwxxww在线视频免费| 黄色大片免费网站| 亚洲中文字幕无码爆乳AV| 久久国产乱子伦精品免费强| 亚洲毛片免费观看| 国产极品粉嫩泬免费观看| 一区免费在线观看| 亚洲制服中文字幕第一区| 国产在线观看片a免费观看| 337p日本欧洲亚洲大胆人人| 亚洲综合另类小说色区| 999久久久免费精品播放| 亚洲人成网站色在线观看| 日韩亚洲国产综合久久久| 久99久无码精品视频免费播放| 亚洲综合在线视频| 在线jyzzjyzz免费视频| 4480yy私人影院亚洲| sss在线观看免费高清| 亚洲ⅴ国产v天堂a无码二区| 天天操夜夜操免费视频| 国产免费A∨在线播放| 亚洲13又紧又嫩又水多| 成年免费大片黄在线观看岛国 | 亚洲综合免费视频|