`
- 浏览:
83985 次
- 性别:
- 来自:
火星
-
采用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();
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
在Java开发环境中,有时我们需要将数据库中的数据导出到Excel文件,以便于数据分析、报表生成或数据共享。这时,一个常用的工具就是JXL库。JXL全称为Java Excel API,它是一个强大的开源Java库,允许开发者在Java...
本篇文章将深入探讨JXL库在操作Excel和数据库导出Excel文件方面的应用。 首先,我们来了解JXL的基本用法。JXL支持读取和写入Biff8格式的Excel文件(即97-2003版本的.XLS文件),这涵盖了大部分常见的Excel文件需求...
在Java编程环境中,将数据库内容导出到Excel文件是一种常见的需求,这可以帮助用户更方便地查看、分析和处理大量数据。jxl库是Java中一个广泛使用的库,它提供了读写Excel文件的功能。本篇文章将深入探讨如何利用jxl...
**标题解析:**"jxl从数据库导出到excel工具包" 这个标题表明我们要讨论的是一个使用jxl库来帮助从数据库中导出数据并将其格式化为Excel文件的工具包。jxl是一个广泛使用的Java库,允许开发者读取、写入和修改Excel...
标题 "jxl 实现根据sql语句导出excel文件" 提到的是使用jxl库来创建Excel文件,并根据SQL查询结果填充数据的过程。jxl是一个Java库,它提供了读写Microsoft Excel文件的能力,这对于在Java应用程序中处理和生成报表...
在Java开发中,有时我们需要将数据库中的数据导出到Excel文件,或者从Excel文件导入数据到数据库。Apache POI是一个流行的API,专为处理Microsoft Office格式的文件,如Excel(.xlsx, .xls)。本教程将详细介绍如何...
使用了hibernate+struts1+spring + MYSql...能够将数据库整张表的数据导出到excel 文件, 也能将excel 的数据导入 到空的 数据库表中。 能够保证导出的数据类型不变。 如要正确运行,必须先执行src 下的backup.sql 脚本
在本文中,我们使用了jxl.jar包来实现将数据库数据导出到Excel表格。jxl.jar包提供了一个简洁的API来操作Excel文件,我们可以使用它来创建、读取和写入Excel文件。在本文中,我们使用ExcelUtils类来将数据库数据导出...
这个库不仅支持Excel到Excel的转换,还支持将数据库中的表信息导出为Excel格式,这对于数据分析、报告生成以及数据交换等场景非常有用。例如,你可以使用SQL查询从SQL Server 2000这样的数据库中提取数据,然后利用...
在Java编程环境中,导出Excel数据是一项常见的任务,特别是在数据处理、报表生成或者数据分析的应用中。...通过以上步骤,你可以轻松地实现从数据库或其他数据源导出数据到Excel文件,满足各种业务需求。
要实现"jxl从数据库中直接导出excel文档",我们遵循以下步骤: 1. **设置环境**:首先,确保你的项目中已经包含了JXL库的jar文件。你可以通过Maven或Gradle等构建工具将其作为依赖添加到项目中。 2. **数据库连接*...
jxl实现excel大数据导出,26000条记录,测试导出时间是19s,例子不算复杂,没有excel样式的处理,可以自己扩展哈,有数据库文件,部署即可看到效果!!! 有三个功能:代码构建数据的导出、数据库数据的导出(从配置...
在Java编程环境中,将JSP表格中的数据导出到Excel文件是一种常见的需求,尤其是在数据分析、报表生成和数据交换等场景中。本篇文章将详细介绍如何利用Java实现这一功能,主要涉及的技术包括Java Servlet、JSP以及...
标题中的“jxl导出excel”指的是使用JExcelApi(简称jxl)库来生成和导出Microsoft Excel格式的文件。JExcelApi是一个开源Java库,允许开发者在Java应用程序中读取、写入和修改Excel文件。这个工具类在处理大量数据...
jxl实现excel导出完整的例子!虽然这个不是和数据库没有联系但是请放心我保证你看了我的这个例子后绝对会自己做出和数据库连接的例子!有事联系我们共同探讨 QQ:376707296
在Jxl导出Excel的场景中,反射机制可以帮助我们动态地创建对象,尤其是当我们不知道具体数据类型或者需要处理的对象数量时。例如,如果你有一个对象列表,每个对象都有不同的属性,你可以通过反射获取这些属性并将其...
本篇文章将深入探讨如何使用jxl库来实现数据从数据库导出到Excel的过程。 首先,要使用jxl库,你需要将其添加到项目的类路径中。如果使用Maven,可以在pom.xml文件中添加以下依赖: ```xml <groupId>...
为了将这两个过程结合起来,我们可以先用JXL读取Excel文件中的数据,然后通过OracleImporter类将这些数据批量插入到数据库。在这个过程中,可能需要对数据进行一些预处理,比如类型转换,错误检查等。 值得注意的是...
本篇将详细介绍如何使用JXL库来导出Excel数据表,并结合描述中的信息,探讨其核心特性和实现方式。 首先,我们来理解"JXL导出Excel数据表"这一主题。JXL(Java Excel API)是一个开源项目,它允许Java程序创建、...
总结一下,本例中使用JXL库和Java反射技术导出Excel文件,不仅可以灵活地处理多种类型的数据,还能实现动态的字段映射,使得程序具有更高的可扩展性和灵活性。通过这种方式,我们可以方便地将Java对象的数据转换为...