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

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

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

    采用jxl實現數據庫結果集導出到excel文件

    采用jxl實現數據庫結果集導出到excel文件


    關鍵字:

    jxl, excel, servlet

    代碼:

    servlet:

    import?jxl.WorkbookSettings;
    import?jxl.Workbook;
    import?jxl.write.WritableWorkbook;
    import?jxl.write.WritableSheet;
    import?jxl.write.Label;
    import?jxl.write.WriteException;
    import?org.springframework.web.context.WebApplicationContext;
    import?org.springframework.web.context.support.WebApplicationContextUtils;
    import?org.springframework.jdbc.core.JdbcTemplate;
    import?org.springframework.jdbc.core.ResultSetExtractor;
    import?org.springframework.jdbc.support.JdbcUtils;
    import?org.springframework.dao.DataAccessException;
    import?org.apache.commons.logging.Log;
    import?org.apache.commons.logging.LogFactory;
    import?org.apache.commons.lang.StringUtils;
    import?org.apache.commons.lang.ArrayUtils;

    import?javax.servlet.http.HttpServlet;
    import?javax.servlet.http.HttpServletRequest;
    import?javax.servlet.http.HttpServletResponse;
    import?javax.servlet.ServletException;
    import?javax.servlet.ServletConfig;
    import?java.util.Locale;
    import?java.util.HashMap;
    import?java.util.Map;
    import?java.io.IOException;
    import?java.sql.ResultSet;
    import?java.sql.SQLException;
    import?java.sql.ResultSetMetaData;

    /**
    ?*?
    Title:ExcelGenerator?servlet
    ?*?
    Description:?采用jxl實現數據庫結果集導出到excel文件。
    ?*?
    Copyright:?Copyright.com?(c)?2003
    ?*?
    Company:
    ?*?History:
    ?*?create
    ?*
    ?*?
    @author?youlq
    ?*?
    @version?1.0
    ?
    */

    public?class?ExcelGenerator?extends?HttpServlet{
    ??
    //設定每個Sheet的行數
    ??private?int?pagesize=5000;
    ??
    private?WorkbookSettings?workbookSettings=new?WorkbookSettings();
    ??
    //springframework?的?WebApplicationContext
    ??public?static?WebApplicationContext?wac=null;
    ??
    //springframework?的?jdbc?操作模版類
    ??public?static?JdbcTemplate?jdbcTemplate=null;
    ??
    protected?final?Log?logger=LogFactory.getLog(getClass());

    ??
    /**
    ???*?初始化
    ???*
    ???*?
    @param?config
    ???*?
    @throws?ServletException
    ???
    */

    ??
    public?void?init(ServletConfig?config)?throws?ServletException{
    ????
    super.init(config);
    ????
    try{
    ??????
    if(null!=getInitParameter("pagesize")){
    ????????pagesize
    =Integer.parseInt(getInitParameter("pagesize"));
    ??????}

    ??????workbookSettings.setLocale(Locale.getDefault());
    ??????wac
    =WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());
    ??????jdbcTemplate
    =(JdbcTemplate)wac.getBean("jdbcTemplate");
    ????}
    ?catch(Exception?e){
    ??????logger.error(
    "ExcelGenerator?init()?error?!"+e,?e.getCause());
    ??????e.printStackTrace();
    ????}

    ??}


    ??
    public?String?getServletInfo(){
    ????
    return?"Servlet?used?to?generate?excel?output";
    ??}


    ??
    public?void?doGet(HttpServletRequest?request,?HttpServletResponse?response)?throws?ServletException,?IOException{
    ????generateExcel(request,?response);
    ??}


    ??
    public?void?doPost(HttpServletRequest?request,?HttpServletResponse?response)?throws?ServletException,?IOException{
    ????generateExcel(request,?response);
    ??}


    ??
    /**
    ???*?in:
    ???*?field1#Title&field2#Title&field3#Title
    ???*?out:
    ???*?{
    ???*?field1:Title,
    ???*?field2:Title
    ???*?field3:Title
    ???*?}
    ???*
    ???*?
    @param?columnTitle
    ???
    */

    ??
    public?static?HashMap?generateColumnTitleMap(String?columnTitle){
    ????HashMap?map
    =new?HashMap();
    ????String[]?level1
    =StringUtils.split(columnTitle,?"&");
    ????
    if(ArrayUtils.isEmpty(level1))?return?null;
    ????
    for(int?i=0;i<level1.length;i++){
    ??????String[]?level2
    =StringUtils.split(level1[i],?"#");
    ??????
    if(ArrayUtils.isEmpty(level2)||level2.length!=2)?return?null;
    ??????map.put(level2[
    0].toLowerCase(),?level2[1]);
    ????}

    ????
    return?map;
    ??}


    ??
    public?void?generateExcel(HttpServletRequest?request,?HttpServletResponse?response)
    ????
    throws?ServletException,?IOException{
    ????
    //todo?只允許本機調用。
    ????request.getRemoteHost();
    ????request.getServerName();
    ????response.setHeader(
    "Content-Disposition",?"attachment;");
    ????response.setContentType(
    "application/x-msdownload");
    ????String?sql
    =(String)request.getSession().getAttribute("ExcelGenerator_sql");
    ????String?columnTitle
    =(String)request.getSession().getAttribute("ExcelGenerator_columntitle");
    ????Map?columnTitleMap
    =null;

    ????
    if(StringUtils.isBlank(sql))?throw?new?ServletException("sql?字符串為空!");
    ????
    if(!StringUtils.isBlank(columnTitle)){
    ??????columnTitleMap
    =generateColumnTitleMap(columnTitle);
    ??????
    if(null==columnTitleMap){
    ????????logger.error(
    "generateColumnTitleMap?error?!columnTitle="+columnTitle);
    ??????}

    ????}


    ????
    final?WritableWorkbook?writableWorkbook=Workbook.createWorkbook(response.getOutputStream(),?workbookSettings);
    ????
    if(jdbcTemplate==null)?throw?new?ServletException("ExcelGenerator?沒有初始化成功!jdbcTemplate==null。");
    ????
    final?Map?columnTitleMap1=columnTitleMap;
    ????jdbcTemplate.query(sql,?
    new?ResultSetExtractor(){
    ??????
    public?Object?extractData(ResultSet?rs)?throws?SQLException,?DataAccessException{
    ????????
    try{
    ??????????
    int?counter=0;
    ??????????
    int?page=1;
    ??????????WritableSheet?writableSheet
    =writableWorkbook.createSheet(""+page+"",?0);
    ??????????ResultSetMetaData?rsmd
    =rs.getMetaData();
    ??????????
    int?columnCount=rsmd.getColumnCount();
    ??????????String[]?columnNames
    =new?String[columnCount];
    ??????????
    for(int?i=1;i<=columnCount;i++){
    ????????????columnNames[i
    -1]=rsmd.getColumnName(i).toLowerCase();
    ????????????
    if(columnTitleMap1==null){
    ??????????????writableSheet.addCell(
    new?Label(i-1,?counter,?columnNames[i-1]));
    ????????????}
    ?else{
    ??????????????writableSheet.addCell(
    new?Label(i-1,?counter,?(String)columnTitleMap1.get(columnNames[i-1])));
    ????????????}

    ??????????}

    ??????????counter
    =1;
    ??????????Object?oValue
    =null;
    ??????????String?value
    =null;
    ??????????
    while(rs.next()){
    ????????????
    //row
    ????????????for(int?i=1;i<=columnCount;i++){
    ??????????????oValue
    =JdbcUtils.getResultSetValue(rs,?i);
    ??????????????
    if(oValue==null){
    ????????????????value
    ="";
    ??????????????}
    ?else{
    ????????????????value
    =oValue.toString();
    ??????????????}

    ??????????????writableSheet.addCell(
    new?Label(i-1,?counter,?value));
    ????????????}

    ????????????
    if(counter++>pagesize){
    ??????????????counter
    =0;
    ??????????????writableSheet
    =writableWorkbook.createSheet(""+(++page)+"",?0);
    ????????????}

    ??????????}

    ????????}
    ?catch(WriteException?e){
    ??????????e.printStackTrace();
    ????????}

    ????????
    return?null;
    ??????}

    ????}

    ????);
    ????writableWorkbook.write();
    ????
    try{
    ??????writableWorkbook.close();
    ????}
    ?catch(WriteException?e){
    ??????logger.error(
    "writableWorkbook.close()?error?!"+e,?e.getCause());
    ??????e.printStackTrace();
    ????}

    ??}

    }


    web.xml

    ??<servlet>
    ????
    <servlet-name>ExcelGeneratorSPAN style="COLOR: #800000">servlet-name>
    ????
    <servlet-class>com.fsti.xmnms.web.servlet.ExcelGeneratorSPAN style="COLOR: #800000">servlet-class>
    ????
    <init-param>
    ?????
    <param-name>pagesizeSPAN style="COLOR: #800000">param-name>
    ?????
    <param-value>5000SPAN style="COLOR: #800000">param-value>
    ????
    SPAN style="COLOR: #800000">init-param>
    ????
    <load-on-startup>3SPAN style="COLOR: #800000">load-on-startup>
    ??
    SPAN style="COLOR: #800000">servlet>
    ??
    <servlet-mapping>
    ????
    <servlet-name>ExcelGeneratorSPAN style="COLOR: #800000">servlet-name>
    ????
    <url-pattern>*.xlsSPAN style="COLOR: #800000">url-pattern>
    ??
    SPAN style="COLOR: #800000">servlet-mapping>


    測試頁面:


    @ page contentType="text/html;charset=GB2312" language="java" %>]]>
    <html>
    <head>
      
    <title>ExcelGenerator testSPAN style="COLOR: #000000">title>
    SPAN style="COLOR: #000000">head>
    <body>

      
    String sql="select id,source_id,user_label from alarm_state";
      
    String columntitle="id#ID&source_id#源設備&user_label#用戶標簽";
      session
    .setAttribute("ExcelGenerator_sql",sql);
      session
    .setAttribute("ExcelGenerator_columntitle",columntitle);
      response
    .sendRedirect("asd.xls");
    %>]]>
    SPAN style="COLOR: #000000">body>
    SPAN style="COLOR: #000000">html>

    ]]>
    posted on 2005-11-06 16:04 一餐三碗 閱讀(6712) 評論(4)  編輯  收藏 所屬分類: 教程

    評論

    # re: 采用jxl實現數據庫結果集導出到excel文件 2005-11-12 00:00 aoenu  回復  更多評論   

    數據量太大的時候不會內存益出吧

    # re: 采用jxl實現數據庫結果集導出到excel文件 2005-11-12 22:06 一餐三碗  回復  更多評論   

    代碼里面沒有考慮這個問題。不過幾萬條數據還是沒問題的

    # 郁悶 2007-05-30 10:01 郁悶  回復  更多評論   

    我的excel是這樣的,第一個單元格是8,第二個單元格是5,第三個單元格是第二個單元格/第一個單元格,值應該是0.625,然后我又設置第三個單元格的格式,以百分數顯示,小數位數為0,這時第三個單元格的內容為63%,
    我用
    Cell c3 = rs.getCell(2, 2);
    String strc3 = c3.getContents();
    我這樣想得到第三個單元格中的63%,可是我怎么得到的是62%,請問我在變動excel的情況下,怎么通過java的jxl包得到63%呀
    謝謝了
    有知道的請往我的郵箱發信息,或QQ聯系
    郵箱:jlzhjx@163.com
    QQ:524240736
    不勝感激呀

    # re: 采用jxl實現數據庫結果集導出到excel文件 2013-05-06 17:17 撒地方  回復  更多評論   

    撒旦法
    主站蜘蛛池模板: 在线观看的免费网站| 国产日韩一区二区三免费高清| 67pao强力打造国产免费| 亚洲国产成人精品无码区在线观看| 青青草国产免费国产是公开| 国产乱子伦精品免费无码专区| 黄色三级三级三级免费看| 亚洲日本中文字幕天堂网| 一级做a爱片特黄在线观看免费看| 亚洲国产精品人人做人人爽| 又硬又粗又长又爽免费看 | 精品免费国产一区二区| 国产亚洲精品AAAA片APP| 免费国产怡红院在线观看| 香蕉视频在线观看免费| 亚洲国产精品第一区二区三区| 在线播放免费人成视频网站| 亚洲综合熟女久久久30p| 免费在线看黄网站| 精品日韩99亚洲的在线发布 | 免费人成年激情视频在线观看| 成人a毛片免费视频观看| 国产成人亚洲综合无码精品| 1000部啪啪未满十八勿入免费| 亚洲情A成黄在线观看动漫软件| 国产又粗又猛又爽又黄的免费视频 | 亚洲AV无码一区东京热久久 | 美女内射毛片在线看免费人动物| 亚洲人成www在线播放| 国产精品亚洲综合一区| 亚洲成人免费电影| 全黄A免费一级毛片| 久久久婷婷五月亚洲97号色| 成年女人免费v片| 伊人免费在线观看高清版| 亚洲日韩中文字幕| 亚洲av无码一区二区三区天堂古代 | 一个人看的hd免费视频| 337p日本欧洲亚洲大胆精品555588| 成人a毛片免费视频观看| 亚洲最新在线视频|