欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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>


这个是指定输出文件的类型。