采用jxl实现数据库结果集导出到excel文件
2009-02-25 14:37
441 查看
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();
}
}
}
<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>
]]>
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>
]]>
相关文章推荐
- 采用jxl实现数据库结果集导出到excel文件
- 采用jxl实现数据库结果集导出到excel文件
- Java导出页面数据或数据库数据至Excel文件并下载,采用JXL技术,小demo(servlet实现)
- JXL把数据库数据导出为EXCEL文件
- HttpHandler实现从数据库表导出Excel文件(使用NPOI库)
- 如保用jxl实现导出Excel文件
- Java Web获取数据库数据,利用jxl实现数据导出成Excel文件
- Strusts2实现jxl导出excel文件
- Java Struts2 实现数据库数据导出Excel文件
- asp.net中实现,用户根据自己的需要,勾选checkbox,然后把查询到数据库中的内容导出到excel
- ASP.NET 实现Excel文件的导入与导出
- Java实现从数据库导出大量数据记录并保存到文件的方法
- 使用jxl实现导出Excel,解决路径和删除文件的问题
- PHP数据库分卷导出备份的实现思路
- Android实现导出数据库到Excel表格
- 使用 PowerDesigner 实现数据库的导入和导出
- springboot实现数据库中数据导出Excel功能
- POI实现海量数据导出到excel文件
- poi实现从数据库到excel的导出。
- JXL导入导出Excel到数据库