struts2+poi 导出Excel文件
来源:互联网 发布:地图数据采集员兼职 编辑:程序博客网 时间:2024/04/26 09:25
<action name="exportExcel" class="com.action.common.ExcelAction"> <result name="success" type="stream"> <param name="contentType">application/vnd.ms-excel;charset=utf-8</param> <param name="inputName">excelStream</param> <param name="contentDisposition">attachment;filename="${fileName}.xls"</param> <param name="bufferSize">1024</param> </result> <result name="error">../report/DataEmpty.jsp</result> </action>
其中,stream类型的结果共可以指定7个参数:
- contentType:下载文件的类型。
- contentLength:下载文件的长度,用于浏览器的进度条显示。
- contentDisposition:指定文件下载的默认名字,如果不指定则使用Action名.action。
- inputName:Action中用于返回InputStream的get方法的名字,默认为inputStream,因此,我们的Action中定义了getInputStream的方法。
- bufferSize:缓冲区大小,默认为(1024)即1k。
- allowCaching:是否允许浏览器进行缓存。
- contentCharSet:HTTP响应头信息中的编码方式。
2.在对应的Action中定义输出流和文件名
2.1 InputStream excelStream; //这个输入流对应上面struts.xml中配置的那个excelStream,两者必须一致
String fileName; //这个名称就是用来传给上面struts.xml中的${fileName}的
并生成get、set方法
然后得到jsp页面传过来的值,可以多个jsp页面的多个按钮使用着同一个Action,只要传过来的值其中有一个作为识别条件即可。如1.jap和2.jsp都要调用此方法,那1.jsp传过来一个“A”,2.jsp传过来一个“B”,根绝A或者B的不同调用不同的List生成方法,就可以实现。
是的,这里下一步就是生成一个存有预期输出结果的List,生成方法可考虑单独建立方法文件,当需要实现多个页面调用或者一个页面多出调用Action方法的时候,建议List生成方法分别些方法文件或几种一个文件,尽量避免放在Action中。
下面的步骤基本如下
if(null == list ){ this.setVestige(actionHistory+"失败!"); return "error"; }else{ //创建Excel工作簿方法2.2 HSSFWorkbook workbook = getWorkbook(list,sheetName,isSum); if (null != workbook) { try { //将工作簿写入最上面定义的InputStream流——名称为excelStream,这个名字对应struts.xml中配置的inputName参数 this.workbook2InputStream(workbook,fileName); return "success"; }catch (IOException e) { e.printStackTrace(); return "error"; } }else{ return "error"; } }
private HSSFWorkbook getWorkbook(List listM,String sheetNames,int isSum) throws Exception { HSSFWorkbook workbook = new HSSFWorkbook();//创建Excel文件 HSSFCellStyle style = workbook.createCellStyle(); // 样式对象 style.setAlignment(HSSFCellStyle.ALIGN_CENTER); style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 指定单元格垂直居中对齐 //////////////////// String[] sheetName = sheetNames.split(","); for(int k = 0; k < listM.size(); k++){ List list = (List) listM.get(k); HSSFSheet sheet = workbook.createSheet();//创建sheet workbook.setSheetName(k, sheetName[k], HSSFCell.ENCODING_UTF_16);//为指定第K个sheet命名,并设定字符集类型 String[] columnNames = (String[]) list.get(0); HSSFRow row = sheet.createRow(0); // 创建第1行,也就是输出表头 HSSFCell cell = row.createCell((short) 0); cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setEncoding(HSSFCell.ENCODING_UTF_16); for (short i = 0; i < columnNames.length; i++) { cell = row.createCell(i); // 创建第i列 cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue(columnNames[i]); } List colunData = null; // 下面是输出各行的数据(留出最后一行,如果是合计信息单独输出,如果非合计信息按照原本样式输出) if(list.size() > 1){ for(int i = 1 ;i < list.size()-1;i++){ colunData = (List) list.get(i); row = sheet.createRow(i);// 创建第i行 for (short j = 0; j < colunData.size(); j++) { cell = row.createCell(j); // 创建第j列 cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue(colunData.get(j).toString()); } } if(isSum == 0){//无需统计信息 colunData = (List) list.get(list.size()-1); row = sheet.createRow(list.size()-1);// 创建第i行 for (short j = 0; j < colunData.size(); j++) { cell = row.createCell(j); // 创建第j列 cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue(colunData.get(j).toString()); } }else if(isSum == 1 ){ colunData = (List) list.get(list.size()-1);//此处留下最后一列 row = sheet.createRow(list.size()-1);// 创建第i行 sheet.addMergedRegion(new Region(list.size()-1, (short)0, list.size()-1, (short) 2)); for (short j = 0; j < colunData.size(); j++) { if(j == 0){ cell = row.createCell(j); // 创建第j列 cell.setCellStyle(style);//设置居中 }else{ cell = row.createCell((short) (j+2)); // 创建第j列 } cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue(colunData.get(j).toString()); } } } } return workbook; }
/** * 将Workbook写入到InputStream * * @param workbook HSSFWorkbook * @param fileName String 文件名 * * */ private void workbook2InputStream(HSSFWorkbook workbook, String fileName) throws Exception { this.setFileName(URLEncoder.encode(fileName,"UTF-8")); ByteArrayOutputStream baos = new ByteArrayOutputStream(); workbook.write(baos); baos.flush(); byte[] aa = baos.toByteArray(); excelStream = new ByteArrayInputStream(aa, 0, aa.length) baos.close(); }
public void setFileName(String fileName) throws UnsupportedEncodingException{ HttpServletRequest request = ServletActionContext.getRequest(); String agent = request.getHeader("User-Agent"); if(null != agent){ agent = agent.toLowerCase(); if (agent.indexOf("firefox") != -1) { this.fileName = new String(URLDecoder.decode(fileName,"UTF-8").getBytes(),"iso-8859-1"); }else { this.fileName = fileName; } } }
http://www.cnblogs.com/jzzlo/archive/2013/03/08/struts2.html
0 0
- struts2+poi 导出Excel文件
- struts2+poi实现excel文件的导出
- struts2+poi实现导出Excel文件
- struts2利用poi导出excel文件
- Struts2+poi实现Excel文件导出
- Struts2 poi导出excel
- POI导出Excel文件
- POI EXCEL 文件导出
- POI 导出excel文件
- POI导出Excel文件
- POI导出Excel文件
- POI导出Excel文件
- struts2结合poi导出excel
- struts2 利用 POI 导出 excel
- Apache POI导出Excel文件
- poi导出为excel文件
- java poi导出excel文件
- 使用POI导出excel文件
- Javascript Array和String的互转换
- IOS---基本控制流程
- MFC教程-应用程序的退出
- Javascript 严格模式详解
- Test__GUI__用java编写一个简单的记事本程序,打包成jar双击运行
- struts2+poi 导出Excel文件
- shell多行注释
- 微软必应·英雄会第三届在线编程大赛:几个bing?
- xen io tapdisk2基本流程分析
- win7下vs2008完美破解安装
- 装饰模式
- MySqlHelper
- ORA-00314,redolog损坏,或丢失处理方法
- 求解