之前做过几个POI的Excel处理,但都没有去整理过。俗话说好记性敌不过烂笔头,所以今天做了一个觉得把代码整理一遍贴出来。
LazyDynaBean!
使用到的东西: struts1.2
jdbc
Apache commons-beanutils.jar
Apache commons-lang.jar
POI 3.0
闲话不多说,上代码....
struts的配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<data-sources />
<form-beans >
</form-beans>
<global-exceptions />
<global-forwards >
<forward name="logs" path="/logs/logs.jsp"></forward>
</global-forwards>
<action-mappings >
<!-- 日志管理 -->
<action path="/logsAction" type="logs.LogsAction"></action>
</action-mappings>
<message-resources parameter="ApplicationResources" />
</struts-config>
Action:
package logs;
import java.io.OutputStream;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.beanutils.DynaBean;
import org.apache.commons.beanutils.LazyDynaBean;
import org.apache.commons.lang.StringUtils;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import logs.dao.LogsDao;
/**
* 日志
*
* @author zhongzy
* @时间 2011-4-13
*/
public class LogsAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
request.setCharacterEncoding("GBK");
String method = StringUtils.defaultIfEmpty(request.getParameter("method"), "");
if ("exportExcel".equals(method)) {
return exportExcel(mapping, form, request, response);
}
// 权限控制
String menuId = request.getParameter("menuId");
int pageSize = 10;
int pageNum = 1;
int rowCount = 0;
String pageStr = request.getParameter("pageNum");
if (pageStr != null) {
pageNum = Integer.parseInt(pageStr);
} else {
pageNum = 1;
}
try {
List<DynaBean> data = LogsDao.selectLogs(request);
rowCount = LogsDao.getLogsCount(request);
int pageCount = rowCount % pageSize == 0 ? rowCount / pageSize
: (rowCount / pageSize + 1);
request.setAttribute("pageNum", pageNum);
request.setAttribute("count", rowCount);
request.setAttribute("countPage", pageCount);
request.setAttribute("list", data);
} catch (Exception e) {
e.printStackTrace();
}
return new ActionForward("logs");
}
public ActionForward exportExcel(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
response.setContentType("application/x-download");
response.setCharacterEncoding("GBK");
response.addHeader("Content-Disposition", "attachment;filename=Logs.xls");
List<DynaBean> list = LogsDao.selectLogs(request);
OutputStream out = response.getOutputStream();
LogsExcel excel = new LogsExcel();
excel.generalTableExport("前台登录日志", title(), list, out);
out.close();
return null;
}
public DynaBean title() {
DynaBean title = new LazyDynaBean();
//|角色|用户编号(用户ID)|用户名|昵称(用户名称)|日志时间|主机IP|主机名
title.set("log_id", "序号");
title.set("rolename", "角色");
title.set("userid", "用户编号(用户ID)");
title.set("username", "用户名");
title.set("nickname", "昵称(用户名称)");
title.set("logdate", "登录时间");
title.set("hostip", "主机IP");
title.set("hostname", "主机名");
return title;
}
}
由于是小应用就直接在Action调用Dao了,Dao:
package logs.dao;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.beanutils.DynaBean;
import org.apache.commons.beanutils.LazyDynaBean;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* @author zhongzy
* @version 1.0
*/
public class LogsDao {
private static log = LogFactory.getLog(LogsDao .class);
/**
* 查询前台登录日志
* @return
* @author zhongzy 2011-04-13
*/
public static List<DynaBean> selectLogs(HttpServletRequest request) {
String sql = " SELECT log_id, rolename, userid, username, nickname, logdate, hostip, hostname \n";
sql += " FROM tc_logs \n";
sql += " WHERE 1=1 \n";
sql += getCondition(request);
List result = null;
ResultSet rs = null;
try {
System.out.println(sql);
rs = .....//查询出结果集
//取数据库的列名
ResultSetMetaData o_resultSetMetaData = rs.getMetaData();
int n_total = o_resultSetMetaData.getColumnCount();
result = new ArrayList<DynaBean>();
DynaBean bean = null;
while (rs.next()) {
bean = new LazyDynaBean();
for(int i = 1; i <= n_total; i++) {
String s_columnName = o_resultSetMetaData.getColumnLabel(i);
String s_value = rs.getString(s_columnName);
bean.set(s_columnName, s_value);
}
result.add(bean);
}
}
catch(Exception ex) {
log.info("查询前台登录日志失败!" + ex.getMessage());
ex.printStackTrace();
}
finally {
if (rs != null) {
rs.close();
}
}
return result;
}
/**
* 查询日志总数
* @param request
* @return
* @author zhongzy 2011-04-13
*/
public static int getLogsCount(HttpServletRequest request) {
String sql = " SELECT COUNT(1) AS dataTotal \n";
sql += " FROM tc_logs \n";
sql += " WHERE 1=1 \n";
sql += getCondition(request);
int result = 0;
try {
result = ...//查询
}
catch(Exception ex) {
log.info("查询前台登录日志总数失败!" + ex.getMessage());
}
return result;
}
/**
* 查询语句条件
* @param request
* @return
* @author zhongzy 2011-04-13
*/
protected static String getCondition(HttpServletRequest request) {
String sql = "";
String startDate = StringUtils.defaultIfEmpty(request.getParameter("startDate"), "");
String endDate = StringUtils.defaultIfEmpty(request.getParameter("endDate"), "");
String rolename = StringUtils.defaultIfEmpty(request.getParameter("rolename"), "");
String username = StringUtils.defaultIfEmpty(request.getParameter("username"), "");
String nickname = StringUtils.defaultIfEmpty(request.getParameter("nickname"), "");
String hostip = StringUtils.defaultIfEmpty(request.getParameter("hostip"), "");
sql += StringUtils.isEmpty(startDate)== true ? "" : " AND logdate>='" + startDate +"'\n";
sql += StringUtils.isEmpty(endDate)== true ? "" : " AND logdate<='" + endDate + "'\n";
sql += StringUtils.isEmpty(rolename)==true ? "" : " AND rolename='" + rolename + "'\n" ;
sql += StringUtils.isEmpty(username)==true ? "" : " AND username LIKE '%" + username.trim() + "%'\n" ;
sql += StringUtils.isEmpty(nickname)==true ? "" : " AND nickname LIKE '%" + nickname.trim() + "%'\n" ;
sql += StringUtils.isEmpty(hostip)==true ? "" : " AND hostip LIKE '%" + hostip.trim() + "%'\n" ;
return sql;
}
}
最后是Excel导出处理类:
package logs;import java.io.IOException;
import java.io.OutputStream;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.beanutils.DynaBean;
import org.apache.commons.beanutils.DynaClass;
import org.apache.commons.beanutils.DynaProperty;
import org.apache.commons.beanutils.LazyDynaBean;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
/**
* 简单 Excel 导出类
* @author zhongzy at 2011-04-13
*
*/
public class LogsExcel {
/**
* 通用表格导出Excel, 单sheet
* @param sheetName sheet显示文字
* @param tableTitle 表格标题
* @param tableData 数据
* @param out 输出流
* @throws IOException
*/
public void generalTableExport(String sheetName, DynaBean title, List data, OutputStream out) throws IOException {
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet(sheetName);
/**
* 数据区域个列样式
*/
HSSFCellStyle cellStyle = workbook.createCellStyle(); // 字体用的风格
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 左右居中
cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 上下居中
cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 下边框
cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); // 左边框
cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); // 右边框
cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); // 上边框
cellStyle.setWrapText(true); // 字符换行
HSSFFont cellFont5 = workbook.createFont();
cellFont5.setFontHeightInPoints((short) 10); // 字号
cellFont5.setFontName("宋体"); // 设置为宋体
cellStyle.setFont(cellFont5);
/**
* 表头样式
*/
HSSFCellStyle titleStyle = workbook.createCellStyle();
//字体
HSSFFont titlefont = workbook.createFont();
titlefont.setFontHeightInPoints((short) 12); // 字体高度
titlefont.setColor(HSSFColor.DARK_GREEN.index); // 字体颜色
titlefont.setFontName("宋体"); // 字体
titlefont.setBoldweight(HSSFFont.COLOR_NORMAL); // 字体加粗
titleStyle.setFont(titlefont);
/**
* 边框
*/
titleStyle.setBorderBottom(HSSFCellStyle.BORDER_DOUBLE);
titleStyle.setBorderLeft((short)1);
titleStyle.setBorderRight((short)1);
titleStyle.setBorderTop(HSSFCellStyle.BORDER_DOUBLE);
titleStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); //样式
titleStyle.setFillForegroundColor(HSSFColor.LIGHT_ORANGE.index); //前景色
titleStyle.setWrapText(false); // 标题栏字符不予换行
/**
* 处理标题栏
*/
int row = 1; // 行号
DynaClass titleDc = title.getDynaClass(); //DynaClass
DynaProperty[] titledp = titleDc.getDynaProperties(); //属性
HSSFRow rowTitle = sheet.createRow(0); // 创建一行
rowTitle.setHeight((short) 500); // 高
for (int i=0; i<titledp.length; i++) {
String key = (String) titledp[i].getName(); // 字段
String value = (String) title.get(key); //值
HSSFCell celli = rowTitle.createCell((short) i); // 创建一列
celli.setEncoding(HSSFCell.ENCODING_UTF_16); // 设置单元格字符
celli.setCellValue(value);
celli.setCellStyle(titleStyle);
sheet.setColumnWidth((short)i, (short)(value.length() * 899)); //设置标题各列的宽度
}
/**
* 处理数据列表
*/
for (Iterator iter = data.iterator(); iter.hasNext();) { // 根据list的大小生成
// execel
DynaBean bean = (LazyDynaBean) iter.next();
HSSFRow rowi = sheet.createRow(row); // 创建一行
rowi.setHeight((short) 300); // 高
int cell = 0; // 列号
DynaClass dc = bean.getDynaClass();
DynaProperty[] dp = dc.getDynaProperties();
for (int i=0; i<dp.length; i++) {
String key = (String) dp[i].getName(); // 字段值
String value = (String) bean.get(key);
HSSFCell celli = rowi.createCell((short) cell); // 创建一列
celli.setEncoding(HSSFCell.ENCODING_UTF_16); // 设置单元格字符
celli.setCellValue(value);
cell++;
}
row++;
}
workbook.write(out);
out.flush();
}
}
JSP调用:
<c:set var="ctx" value="${pageContext.request.contextPath}"></c:set><script type="text/javascript">
function exportExcel() {
document.location.href = "${ctx}/logsAction.do?method=exportExcel";
}
</script>
<input name="export" type="button" class="button" onclick="exportExcel();" value="结果导出Excel"/>
jsp部分就自己去完善吧。^^
分享到:
相关推荐
使用POI筛选字段导出Excel,以及条件查询和指定数据导出
总结起来,"使用poi从数据库导出excel表的示例"是一个结合了Struts1 MVC框架和Apache POI库的Java编程任务,它涉及数据库连接、SQL查询、Excel文件生成以及Web应用响应。这个过程不仅有助于数据的高效管理和分享,也...
在本案例中,我们关注的是如何使用 Apache POI 库来导出 Excel 文件,特别是根据模板导出和简单列表导出。下面将详细介绍这个过程。 1. **Apache POI 概述** Apache POI 提供了 Java API 来读写 Microsoft Office ...
### POI 基于模板导出 Excel 的实现方法 #### 概述 Apache POI 是一个用于读写 Microsoft Office 格式文件的 Java 库,其中包括对 Excel 文件的支持。在实际开发过程中,经常会遇到需要根据现有的 Excel 模板来...
基于SpringBoot和POI实现单线程和多线程导出Excel.zip基于SpringBoot和POI实现单线程和多线程导出Excel.zip基于SpringBoot和POI实现单线程和多线程导出Excel.zip基于SpringBoot和POI实现单线程和多线程导出Excel.zip...
本教程将详细介绍如何利用Apache POI库来实现使用多个Sheet(工作簿)导出一个Excel文件的功能。 一、Apache POI简介 Apache POI 是一个开源项目,提供API来读取、写入和修改Microsoft Office文件格式,如Word(DOC...
以下是一个简化的示例,演示了如何使用POI导出Excel: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.FileOutputStream; import java.io....
POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI...
Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的...以上内容涵盖了使用Apache POI按照模板导出Excel的基本步骤和关键知识点。实践中,你可能需要根据具体需求调整和扩展这些代码,以满足更复杂的场景。
java使用POI导出 Excel+图片工具类 ,里面含有poi jar包,只调用接口即可直接保存Excel。使用的时候需先把数据封装,具体包装需根据实际导出数据进行处理。文件demo中只提供包装格式。
在IT行业中,Apache POI是一个广泛使用的库,主要用于读取和写入Microsoft Office格式的文件,尤其是Excel。本文将深入探讨如何使用POI库来实现Excel文件的导出,以及如何将图片URL转换为图片文件并与其他文件一起...
在这个特定的例子中,我们将讨论如何使用POI库基于一个Excel模板文件循环输出数据行,并将结果导出为新的Excel文件。 首先,我们需要理解POI库的基本概念。POI提供了HSSF(Horizontally SpreadSheet Format)和XSSF...
springboot+poi导出指定格式Excel模板,完整项目,导出即用。springboot+poi导出指定格式Excel模板,完整项目,导出即用。springboot+poi导出指定格式Excel模板,完整项目,导出即用。springboot+poi导出指定格式...
Java POI 实现 Excel 导入导出 Java POI 是一个流行的 Java 库,用于处理 Microsoft Office 文件格式,包括 ...在本文中,我们已经详细介绍了如何使用 Java POI 实现 Excel 导入导出功能,包括读取和写入 Excel 文件。
在Java Web开发中,Struts2是一个非常流行的MVC框架,它简化了处理HTTP...总之,通过Struts2和Apache POI的结合,开发者可以方便地在Web应用中提供数据导出为Excel的功能,这对于数据分析、报表生成等场景非常实用。
此外,项目可能还考虑了错误处理和异常捕获,确保在多线程环境中数据的一致性和完整性。这可能涉及到对线程安全的数据结构,如ConcurrentHashMap,以及适当的同步机制,以避免数据竞争。 总之,"poi多线程大数据...
Apache POI是一个流行的开源库,它允许程序员使用Java来创建、修改和操作Microsoft Office格式的文件,尤其是Excel(XLS和XLSX)文件。本教程将详细介绍如何利用Apache POI库实现从数据库导出数据到Excel的工作流程...
Java基于POI的导入导出excel功能,附带测试功能,项目基于Maven,导入即可用,带测试Main方法提供例子。 用于导入导出Excel的Util包,基于Java的POI。可将List导出成Excel,或读取Excel成List、Map,Object>,很方便...
本文将详细介绍如何使用Apache POI实现Excel的导出功能,并在此基础上实现自动换行。 #### 一、Apache POI简介 Apache POI是一个流行的Java库,用于创建和维护Microsoft Office文档。它包括对Word(DOCX),Excel...
本文将深入探讨如何使用SpringBoot结合Mybatis和Apache POI库来实现Excel文件的导入与导出。 首先,SpringBoot是一个轻量级的Java框架,它简化了新Spring应用程序的初始设置和配置。集成Mybatis作为持久层框架,...