文件导出的公共方法

本文介绍了一种在Java环境中使用POI库实现导出数据到Excel文件的公共方法。该方法接受标题、列名映射、数据列表及文件名作为参数,通过设置单元格样式、创建工作簿和工作表,将数据填充到Excel表格中,并处理文件的保存和响应头设置。
/**
	 * 
	 *@注释 导出公共方法
	 *@方法名称 genExport
	 * @param title
	 * @param column
	 * @param date
	 * @param filename
	 * @throws Exception
	 */
	public static void genExport(String title, Map<String,String> column,List<Map<String,Object>> date, String filename) throws Exception {
		ServletActionContext.getResponse().setCharacterEncoding("UTF-8");
		HttpServletRequest r = ServletActionContext.getRequest();
		HttpServletResponse response = ServletActionContext.getResponse();
		// 第一步,创建一个webbook,对应一个Excel文件
		HSSFWorkbook wb = new HSSFWorkbook();
		// 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
		HSSFSheet sheet = wb.createSheet(title);
		sheet.setDefaultColumnWidth(20);
		// 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
		HSSFRow headrow = sheet.createRow((int) 0); 
		// 第四步,创建单元格,并设置值表头 设置表头居中
		HSSFCellStyle style = wb.createCellStyle();
		style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
		headrow = sheet.createRow(0);
		if(column==null) return;
		Object [] colStr = (Object [])column.keySet().toArray();
		for(int i=0; i<colStr.length; i++) {
			HSSFCell cell = headrow.createCell(i);  
			cell.setCellValue(column.get(colStr[i].toString()));
			cell.setCellStyle(style);  	
		}
		for(int j = 0; j <date.size(); j++) {
			Map<String,Object> obj = date.get(j);
			HSSFRow  row = sheet.createRow(j+1);
			for(int i=0; i<colStr.length; i++) {
				row.createCell(i).setCellValue(obj.get(colStr[i]) != null?obj.get(colStr[i]).toString():""); 
			}
		}
		// 第六步,将文件存到指定位置
		try {
			FileOutputStream fout = new FileOutputStream(filename);
			wb.write(fout);
			fout.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		response.setContentType(filename);
		response.setHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes(), "ISO8859-1"));
		InputStream in = new FileInputStream(filename);
		OutputStream out = response.getOutputStream();
		// 写文件
		int b;
		while ((b = in.read()) != -1) {
			out.write(b);
		}
		in.close();
		out.close();
		File file = new File(filename);
		file.delete();
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值