struts2 导出XLS问题 ExcelLinux单元测试StrutsXML
程序员文章站
2022-04-04 19:43:37
...
最近做一个项目要用到导出Excel文件。一个大体的思路就是先在服务器端将这个excel文件生成出来,然后用InputStream流输出。
第一个碰到的问题就是XLS文件的生成,在网上找了一个poi的工具包生成XLS
首先:
// 创建新的 Excel 工作簿 HSSFWorkbook workbook = new HSSFWorkbook(); // 在 Excel 工作簿中建创一个工作表,其名为缺省值 sheet1 HSSFSheet sheet = workbook.createSheet("sheet1"); HSSFRow row = sheet.createRow(0); // 在一行中创建一个表格 HSSFCell cell = row.createCell((short) 0); // 设置此单元格中存入的是字符串 cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setEncoding(HSSFCell.ENCODING_UTF_16); // 向此单元格中放入值 cell.setCellValue("姓名");
发现 cell.setEncoding和cell.setCellValue这2个方法已经过时。怎么办呢。Google一下发现原来从poi3.0以后会自动的封装值类型了。我们只需要
cell.setCellValue(new HSSFRichTextString("姓名"));
XLS生成好了后。然后在action中的输出流中指向这个文件路径
private String fileName;// 初始的通过param指定的文件名属性 /** 提供转换编码后的供下载用的文件名 */ public String getDownloadFileName() { String downFileName = fileName; try { downFileName = new String(downFileName.getBytes("GBK"), "ISO8859-1"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return downFileName; } //要导出文件的PATH public String downloadSample() throws Exception { this.fileName="/联系人导入模板.xls"; return "downloadSample"; } // 导出 public InputStream getInputSampleContacts() throws Exception { String filePath = ServletActionContext.getServletContext().getRealPath(this.fileName; log.info(filePath); XLSExport XLSexpt = new XLSExport(filePath,contactsDAO,groupDAO); XLSexpt.write(); return new FileInputStream(filePath); }
在struts.xml中配置
<result name="downloadContacts" type="stream"> <param name="contentType">application/vnd.ms-excel</param> <param name="inputName">inputSampleContacts</param> <!-- 使用经过转码的文件名作为下载文件名,downloadFileName属性对应action类中的方法 getDownloadFileName() --> <param name="contentDisposition">attachment;filename="${downloadFileName}"</param> <param name="bufferSize">4096</param> </result>
最后 页面
<a href="<%=basePath%>contacts/downloadContacts.action">导出文件</a>
大体上就是这样了。
几个注意的地方就是
downFileName = new String(downFileName.getBytes("GBK"), "ISO8859-1");
这里如果你不指定"GBK"的话 在windows环境下部署测试是没问题的。如果放到linux 服务器下会出现中文乱码问题。
<param name="contentType">application/vnd.ms-excel</param>、
这个是指定输出文件的类型。