配置文件:
<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>
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; //service public 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; } }
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; }
/** * 样式读取方法 * * @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; }
原文地址:http://sric08.iteye.com/blog/797685