`
youlq
  • 浏览: 83985 次
  • 性别: Icon_minigender_1
  • 来自: 火星
社区版块
存档分类
最新评论

采用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!=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();
分享到:
评论

相关推荐

    使用jxl将数据库的数据导出到Excel

    在Java开发环境中,有时我们需要将数据库中的数据导出到Excel文件,以便于数据分析、报表生成或数据共享。这时,一个常用的工具就是JXL库。JXL全称为Java Excel API,它是一个强大的开源Java库,允许开发者在Java...

    JXL操作EXCEL 数据库导出EXCEL相关文件

    本篇文章将深入探讨JXL库在操作Excel和数据库导出Excel文件方面的应用。 首先,我们来了解JXL的基本用法。JXL支持读取和写入Biff8格式的Excel文件(即97-2003版本的.XLS文件),这涵盖了大部分常见的Excel文件需求...

    利用jxl实现数据库内容导出Excel

    在Java编程环境中,将数据库内容导出到Excel文件是一种常见的需求,这可以帮助用户更方便地查看、分析和处理大量数据。jxl库是Java中一个广泛使用的库,它提供了读写Excel文件的功能。本篇文章将深入探讨如何利用jxl...

    jxl从数据库导出到excel工具包

    **标题解析:**"jxl从数据库导出到excel工具包" 这个标题表明我们要讨论的是一个使用jxl库来帮助从数据库中导出数据并将其格式化为Excel文件的工具包。jxl是一个广泛使用的Java库,允许开发者读取、写入和修改Excel...

    jxl 实现根据sql语句导出excel文件

    标题 "jxl 实现根据sql语句导出excel文件" 提到的是使用jxl库来创建Excel文件,并根据SQL查询结果填充数据的过程。jxl是一个Java库,它提供了读写Microsoft Excel文件的能力,这对于在Java应用程序中处理和生成报表...

    JAVA实现数据库数据导入导出到Excel(POI)所需jar包

    在Java开发中,有时我们需要将数据库中的数据导出到Excel文件,或者从Excel文件导入数据到数据库。Apache POI是一个流行的API,专为处理Microsoft Office格式的文件,如Excel(.xlsx, .xls)。本教程将详细介绍如何...

    jxl 实现的数据库导入导出

    使用了hibernate+struts1+spring + MYSql...能够将数据库整张表的数据导出到excel 文件, 也能将excel 的数据导入 到空的 数据库表中。 能够保证导出的数据类型不变。 如要正确运行,必须先执行src 下的backup.sql 脚本

    Android开发实现的导出数据库到Excel表格功能【附源码下载】

    在本文中,我们使用了jxl.jar包来实现将数据库数据导出到Excel表格。jxl.jar包提供了一个简洁的API来操作Excel文件,我们可以使用它来创建、读取和写入Excel文件。在本文中,我们使用ExcelUtils类来将数据库数据导出...

    使用Jxl将数据库表信息转换为Excel

    这个库不仅支持Excel到Excel的转换,还支持将数据库中的表信息导出为Excel格式,这对于数据分析、报告生成以及数据交换等场景非常有用。例如,你可以使用SQL查询从SQL Server 2000这样的数据库中提取数据,然后利用...

    jxl实现导出excel数据

    在Java编程环境中,导出Excel数据是一项常见的任务,特别是在数据处理、报表生成或者数据分析的应用中。...通过以上步骤,你可以轻松地实现从数据库或其他数据源导出数据到Excel文件,满足各种业务需求。

    jxl 导出 excel

    要实现"jxl从数据库中直接导出excel文档",我们遵循以下步骤: 1. **设置环境**:首先,确保你的项目中已经包含了JXL库的jar文件。你可以通过Maven或Gradle等构建工具将其作为依赖添加到项目中。 2. **数据库连接*...

    jxl实现excel大数据导出

    jxl实现excel大数据导出,26000条记录,测试导出时间是19s,例子不算复杂,没有excel样式的处理,可以自己扩展哈,有数据库文件,部署即可看到效果!!! 有三个功能:代码构建数据的导出、数据库数据的导出(从配置...

    java实现JSP表格数据导出到EXCEL文件

    在Java编程环境中,将JSP表格中的数据导出到Excel文件是一种常见的需求,尤其是在数据分析、报表生成和数据交换等场景中。本篇文章将详细介绍如何利用Java实现这一功能,主要涉及的技术包括Java Servlet、JSP以及...

    jxl导出excel

    标题中的“jxl导出excel”指的是使用JExcelApi(简称jxl)库来生成和导出Microsoft Excel格式的文件。JExcelApi是一个开源Java库,允许开发者在Java应用程序中读取、写入和修改Excel文件。这个工具类在处理大量数据...

    jxl实现excel导出完整的例子

    jxl实现excel导出完整的例子!虽然这个不是和数据库没有联系但是请放心我保证你看了我的这个例子后绝对会自己做出和数据库连接的例子!有事联系我们共同探讨 QQ:376707296

    J2EE使用Jxl实现导出Execl

    在Jxl导出Excel的场景中,反射机制可以帮助我们动态地创建对象,尤其是当我们不知道具体数据类型或者需要处理的对象数量时。例如,如果你有一个对象列表,每个对象都有不同的属性,你可以通过反射获取这些属性并将其...

    使用Java的jxl方式导出到Excel

    本篇文章将深入探讨如何使用jxl库来实现数据从数据库导出到Excel的过程。 首先,要使用jxl库,你需要将其添加到项目的类路径中。如果使用Maven,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;...

    JXL(Java操作Excel文件Oracle数据库)

    为了将这两个过程结合起来,我们可以先用JXL读取Excel文件中的数据,然后通过OracleImporter类将这些数据批量插入到数据库。在这个过程中,可能需要对数据进行一些预处理,比如类型转换,错误检查等。 值得注意的是...

    JXL导出Excel数据表

    本篇将详细介绍如何使用JXL库来导出Excel数据表,并结合描述中的信息,探讨其核心特性和实现方式。 首先,我们来理解"JXL导出Excel数据表"这一主题。JXL(Java Excel API)是一个开源项目,它允许Java程序创建、...

    jxl导出excel文件的例子,用了java反射

    总结一下,本例中使用JXL库和Java反射技术导出Excel文件,不仅可以灵活地处理多种类型的数据,还能实现动态的字段映射,使得程序具有更高的可扩展性和灵活性。通过这种方式,我们可以方便地将Java对象的数据转换为...

Global site tag (gtag.js) - Google Analytics