struts2 excel下载
来源:互联网 发布:美团餐饮大数据 编辑:程序博客网 时间:2024/04/30 13:11
配置文件:
<action name="gatherSecretFillInData" class="sssManagerAction"method="gatherSecretFillInData"><!-- EXCEL 模板所在位置 --><param name="templatePosition">/com/sss/cms/sssManager/excel/gatherSecretFillinTemplate.xls</param><result type="stream" name="success"><!-- 下载文件的类型,假如下载的是其他的,但你又不知道是什么格式,可以去 tomcat\conf\web.xml下找 --><param name="contentType">application/vnd.ms-excel</param><!-- 返回流 excelStream为action中的流变量名称 --><param name="inputName">excelStream</param><!-- attachment 这个位置的参数挺特殊的,可以设置成下载时,是否出现个下载提示框,或者直接下载之类的,怎么设置忘了,那个小本子找不到了fileName指定生成的文件名字(这种方式合适动态生成文件名,比如做报表时,一般都要说是几月的统计数据之类)为action中变量 --><param name="contentDisposition">attachment;filename=${excelFileName}</param><param name="bufferSize">1024</param></result></action>
整个配置文件中最重要的两个变量就是 excelStream、excelFileName,这两个变量一定要在action中有定义,否则会报错。差点忘了还有个变量templatePosition,这个是运用模板的路径,用模板的意思,是可以预先设置好各种单元格包括颜色,对齐方式,数据格式,这些东西在程序里也可以控制,但太累,还是用模板吧,代码量少,假如客户想换个颜色什么的也简单,改下模板就好。
action:
package com.sss.cms.sssManager.action;import java.io.InputStream;import java.io.UnsupportedEncodingException;import java.util.Map;import javax.servlet.http.HttpServletRequest;import com.sss.cms.sssManager.service.SssManagerService;public class SssManagerAction extends ActionSupport {private InputStream excelStream; //输出流变量private String excelFileName; //下载文件名private String templatePosition; //模板路径private SssManagerService sssManagerService; //servicepublic String gatherSecretFillInData() throws Exception {HttpServletRequest request = (HttpServletRequest)ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);String contextPath=request.getRealPath("/");Map<String,Object> aa=sssManagerService.gatherSecretFillInData(contextPath+"WEB-INF/classes"+templatePosition);excelStream=(InputStream)aa.get("stream");this.excelFileName=(String)aa.get("excelName")+".xls";return SUCCESS;}/** * 提供中文转换的功能 * @return */public String getExcelFileName() {try {return new String(this.excelFileName.getBytes(), "ISO8859-1");} catch (UnsupportedEncodingException e) {e.printStackTrace();}return "aaa.xls";}public InputStream getExcelStream() {return excelStream;}public void setExcelStream(InputStream excelStream) {this.excelStream = excelStream;}public String getTemplatePosition() {return templatePosition;}public void setTemplatePosition(String templatePosition) {this.templatePosition = templatePosition;}public SssManagerService getSssManagerService() {return sssManagerService;}public void setSssManagerService(SssManagerService sssManagerService) {this.sssManagerService = sssManagerService;}public void setExcelFileName(String excelFileName) {this.excelFileName = excelFileName;}}
service:
public Map<String,Object> gatherSecretFillInData(String templatePosition) {Map<String,Object> returnMap=new HashMap<String, Object>();InputStream is;ByteArrayInputStream aas;try {is = new FileInputStream(templatePosition);HSSFWorkbook wb = new HSSFWorkbook(is);HSSFSheet sheet = wb.getSheetAt(0);/** *.... 构建 sheet 代码 */ByteArrayOutputStream os = new ByteArrayOutputStream();try {wb.write(os);} catch (IOException e) {e.printStackTrace();}byte[] content = os.toByteArray();aas = new ByteArrayInputStream(content);returnMap.put("stream", aas);returnMap.put("excelName", titlePreStr);return returnMap;} catch (Exception ex) {ex.printStackTrace();}return null;}
service中返回的是个 Map,当中包括返回流跟 excel 名称两部分,因为我们的需求 excel 的标题就是文件名,所有这样写,挺好的,另外再附上一个我自己写的解析样式的方法,个人觉得挺好用。
/** * 样式读取方法 * * @param styleName * 样式名数组 * @param styleRow * 样式行 * @param startCol * 开始列位置 * @param startCol * 空白样式列位置 null:不进行空替换 * @return */public static Map<String, HSSFCellStyle> readStyle(String[] styleName,HSSFRow styleRow, short startCol, Integer blankCol) {Map<String, HSSFCellStyle> returnMap = new HashMap<String, HSSFCellStyle>();HSSFCellStyle blankStyle = null;if (null != blankCol) {blankStyle = styleRow.getCell(blankCol.shortValue()).getCellStyle();styleRow.getCell(blankCol.shortValue()).setCellValue("");}for (String name : styleName) {HSSFCell cell = styleRow.getCell(startCol);HSSFCellStyle style = cell.getCellStyle();returnMap.put(name, style);cell.setCellValue("");if (null != blankStyle) {cell.setCellStyle(blankStyle);}startCol++;}return returnMap;}
把样式都放到一个Map里,方法间传递样式的时候只需要传这个样式Map就好,避免传一堆样式参数。
原文地址:http://sric08.iteye.com/blog/797685
- struts2 excel下载
- struts2 下载Excel
- struts2--图片/Excel下载
- Struts2 + poi 动态生成Excel 下载
- struts2输出并下载excel文件
- struts2生成excel文件和下载
- struts2 word、excel文件的下载
- struts2输出并下载excel文件
- struts2 生成并下载 excel 文件 (jxl)
- struts2 poi导出excel实例代码下载
- java 关于excel下载 struts2 servlet springmvc
- 基于Struts2的Excel的下载
- Java Struts2 POI创建Excel文件并实现文件下载
- Java Struts2 POI创建Excel文件并实现文件下载
- java --struts2数据库导出Excel文件,下载提示
- Struts2+POI 实现生成Excel文件和下载
- Java Struts2 POI创建Excel文件并实现文件下载
- Java Struts2 POI创建Excel文件并实现文件下载
- js的数组、对象数组和对象的定义和js内部对象和with、for..in的用法
- 应用反射动态调用类库中的各类的方法
- 18个搞死创业公司的致命伤
- <s:iterator> 中的status 使用方法
- 关于const重载
- struts2 excel下载
- TSM+RMAN异机恢复实验
- Reporting Service 2005到2008升级测试
- Cocoa框架类之间继承关系
- 让IE支持HTML5
- Boyer-Moore算法学习
- linux 下去掉^M
- Android仿Launcher效果
- ubuntu更新(安装)软件卡死解决方案