采用jxl实现数据库结果集导出到excel文件

http://www.blogjava.net/youlq/archive/2005/11/06/18459.html

代码:

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!=2return 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==nullthrow 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 > ExcelGenerator SPAN style="COLOR: #800000">servlet-name >      < servlet-class > com.fsti.xmnms.web.servlet.ExcelGenerator SPAN style="COLOR: #800000">servlet-class >      < init-param >       < param-name > pagesize SPAN style="COLOR: #800000">param-name >       < param-value > 5000 SPAN style="COLOR: #800000">param-value >      SPAN style="COLOR: #800000">init-param >      < load-on-startup > 3 SPAN style="COLOR: #800000">load-on-startup >    SPAN style="COLOR: #800000">servlet >    < servlet-mapping >      < servlet-name > ExcelGenerator SPAN style="COLOR: #800000">servlet-name >      < url-pattern > *.xls SPAN 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>
]]>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值