注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

我的博客

 
 
 

日志

 
 

Java生成Excel实例  

2012-02-10 11:21:42|  分类: JAVA |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

方法1 最简单的方法使用Displaytag标签
1、需先下载对应的jar包解压后将
displaytag-1.1.jar、displaytag-export-poi-1.1.jar、displaytag-portlet-1.1.jar放入lib下
alternative.css、displaytag.css、screen.css放入文件里,此处是放在了displaytag_css

2、在web.xml中注册
<filter>
<filter-name>ResponseOverrideFilter</filter-name>
<filter-class>
org.displaytag.filter.ResponseOverrideFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>ResponseOverrideFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>ResponseOverrideFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>

3、页面中引入
<%@ taglib uri="http://displaytag.sf.net" prefix="display"%>
<%@ taglib uri="http://displaytag.sf.net/el" prefix="display-el"%>

<LINK href="./displaytag_css/alternative.css" type=text/css rel=stylesheet><!-- 标题控制样式 -->
<LINK href="./displaytag_css/displaytag.css" type=text/css rel=stylesheet><!-- 分页标签 -->
<LINK href="./displaytag_css/screen.css" type=text/css rel=stylesheet><!-- 分页标签 -->

<display:table name="create_list" export="true" class="mars" style="width: 60%; border-spacing:1px; border-collapse:1px;" >?
<display:setProperty name="export.pdf" value="false" />
<display:setProperty name="export.xml" value="false" />
</display:table>

其中name="create_list"的create_list是action中经过查询数据库返回的list结果集后用request保存的域值


方法2 使用javaexcel(jxl)实现
1、需先下载对应的jar包下载地址:http://www.andykhan.com/jexcelapi/jexcelapi_2_6_3.tar.gz
解压后将jxl.jar放入lib下

2、public ActionForward down_excel(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
try {
String fileName = "test";
response.setContentType("aplication/msexcel"); //设置文件类型
response.setHeader("Content-disposition","attachment; filename=" + fileName + ".xls");
WritableWorkbook book = Workbook.createWorkbook(response.getOutputStream()); //创建文件
WritableSheet sheet = book.createSheet("sheet", 0); //创建工作薄

jxl.write.WritableFont titleFont = new jxl.write.WritableFont(WritableFont.ARIAL, 12, WritableFont.BOLD, false,UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.DARK_BLUE);
jxl.write.WritableCellFormat titleCellFormat = new jxl.write.WritableCellFormat(titleFont);

//设置表头
String[] titles = new String[]{ "手机号码", "订购栏目", "栏目价格", "订购退订时间", "发送时间", "订购来源" , "计费情况","业务状态" };

int columnLength[] = { 20, 30, 10, 30, 20, 15, 15,15 };
for (int i = 0; i < titles.length; i++) {
sheet.setColumnView(i, columnLength[i]); //设置列的宽度
Label label = new Label(i, 0, titles[i], titleCellFormat);
sheet.addCell(label);
}

//动态填充数据
Vector vector = this.getDownExcelDao().excel();
for (int i = 0; i < vector.size(); i++) {?
String[] sdata = (String[]) vector.elementAt(i);
for (int j = 0; j < sdata.length; j++) {
Label wlabel1 = new Label(j, i, sdata[j]);?
sheet.addCell(wlabel1);
}
}
book.write();
book.close();
} catch (Exception e) {
e.printStackTrace();
}

return null ;
}

3、实现层(JdbcDaoSupport)
public Vector excel(){
try{
Vector vect = new Vector();
StringBuffer sb = new StringBuffer();
sb.append( " SELECT u.telephone ,i.ITEM_NAME, i.ITEM_PRICE ,t.input_date,u.send_date,t.state,t.account_state,t.dispose_state ");
sb.append( " FROM user_temp u ,temp_item t ,ITEM_INF i where u.id = t.id and t.item_id = i.ITEM_ID");
Connection cnn = this.getJdbcTemplate().getDataSource().getConnection();
Statement st = cnn.createStatement();
ResultSet rs = st.executeQuery( sb.toString());
int collength = 0;
while (rs.next()) {
collength = rs.getMetaData().getColumnCount();
String[] rowdata = new String[collength];
for (int k = 1; k <= collength; k++) {
rowdata[k - 1] = rs.getString(k);
}
vect.add(rowdata);
}
rs.close();
st.close();
cnn.close();

return vect ;
}catch (Exception e) {
e.printStackTrace();
return null ;
}
}


4、页面调用
<a href="DownAction?method=down_excel">Excel</a>
如此即完成了使用jxl生成excel的例子

/*以下是需注意比较的地方
1:下载时如果出现文件下载 安全警告原因在于生成的文件名带有中文需转码
将action中fileName处如下转码(和一般转码不同特别注意顺序)
fileName = new String( fileName.getBytes("gbk"),"ISO-8859-1");
2:此例子是根据返回的Vector填充数据的,
该方法若一个结果集包含的数据

  评论这张
 
阅读(125)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018