poi导出excel

poi导出excel,这里介绍两种方法:一种是写到本地磁盘,一种是从浏览器下载

一.写到本地磁盘的方法

1.先写一个导出的公用方法,然后传入数据即可,工具类可以拿走直接用,传参就行了。

/**
	 * Purpose:汇出excel工具类
	 * @author JaxWan
	 * @param fileName 文件名称
	 * @param titles 表头集合
	 * @param dateMaps 数据集合
	 * @return HSSFWorkbook
	 */
	public void dateToExcel(String fileName,List<String> titles,List<Map<String,Object>> dateMaps){
		
		//创建工作簿
		HSSFWorkbook workbook = new HSSFWorkbook();
		//创建工作表
		HSSFSheet sheet = workbook.createSheet();
		//创建单元格样式 ,首先生成一个样式
		HSSFCellStyle cellStyle = workbook.createCellStyle();
		//设置这些样式
		cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中 
		cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中 
		// 背景色
//		cellStyle.setFillForegroundColor(HSSFColor.GREEN.index);
//		cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); 
//		cellStyle.setFillBackgroundColor(HSSFColor.GREEN.index);
		//设置边框
		cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框    
		cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框    
		cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框    
		cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框    
		//自动换行
		cellStyle.setWrapText(true);
		//生成一个字体
		HSSFFont font = workbook.createFont();//设置字体大小
		font.setFontHeightInPoints((short) 12); // 字体高度
		font.setFontName("宋体"); // 字体
		//把字体应用到当前样式
		cellStyle.setFont(font);
		//创建行
		HSSFRow row;
		row = sheet.createRow(0);
		//设置表头
		for (int i = 0; i < titles.size(); i++) {
			HSSFCell cell = row.createCell(i);
			cell.setCellValue(titles.get(i));
			cell.setCellStyle(cellStyle);
			//设置列宽
			sheet.setColumnWidth(i, 3766);
		}
		//填充数据
		for (int i = 0; i < dateMaps.size(); i++) {
			Map<String, Object> map = dateMaps.get(i);
			//第一行是表头  数据要从第二行开始
			row = sheet.createRow(i+1);
			//第一种遍历map的方法,通过加强for循环map.keySet(),然后通过键key获取到value值
			int cellNumber = 0;
			for (String s : map.keySet()) {
				System.out.println("key : " + s + " value : " + map.get(s));
				//创建单元格并赋值
				HSSFCell cell = row.createCell(cellNumber);
				cell.setCellValue((String)map.get(s));
				cell.setCellStyle(cellStyle);
				cellNumber++;
			}
		}
		
		try {
			String path = "E:";
			OutputStream out = new FileOutputStream(path+fileName+".xls");
			out.flush();
			workbook.write(out);
			out.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

2.调用工具类输出到指定位置,我的是"E:"

public void importFlightPlanInfo() throws Exception {
		List<String> titles = new ArrayList<String>();
		titles.add("航班号");
//		titles.add("类别");
		titles.add("计飞old");
		titles.add("计飞new");
		titles.add("计飞差");
		titles.add("预飞old");
		titles.add("预飞new");
		titles.add("预飞差");
		titles.add("实飞old");
		titles.add("实飞new");
		titles.add("实飞差");
		titles.add("计达old");
		titles.add("计达new");
		titles.add("计达差");
		titles.add("预达old");
		titles.add("预达new");
		titles.add("预达差");
		titles.add("实达old");
		titles.add("实达new");
		titles.add("实达差");
		titles.add("状态");
		titles.add("机型");
		titles.add("更新时间");

		String sql = " select flt_aid,schd_dpt_dt_old,schd_dpt_dt_new,schd_dpt_dt1,estmt_dpt_dt_old,estmt_dpt_dt_new,estmt_dpt_dt1,dpt_tm_old,dpt_tm_new,dpt_tm1, "
				+ " schd_arrv_dt_old,schd_arrv_dt_new,schd_arrv_dt1,estmt_arrv_dt_old,estmt_arrv_dt_new,estmt_arrv_dt1,arrv_dt_old,arrv_dt_new,arrv_dt1, flt_stat_chn_nm,air_crft_typ_cd,flight_date"
				+ " from w_source_test where 1=1 ";
		List<Map<String, Object>> flights1 = dao.getMapList(sql);
		String fileName  = "定时导出excel任务";
		this.dateToExcel(fileName+new Date().getHours(), titles, flights1);
	}

 

二.从浏览器中下载,大致思路还是先写一个工具类,然后从wen端调用,输出就可以了

1.工具类,和上面那个只有一点区别 就是不输出到本地了,而是返回一个HSSFWorkbook 对象(HSSFWorkbook 和XSSFWorkbook的区别有空再说吧,这里就不说了 )

/**
	 * Purpose:汇出excel工具类
	 * @author JaxWan
	 * @param fileName 文件名称
	 * @param titles 表头
	 * @param dateMaps 数据集合
	 * @return HSSFWorkbook
	 */
	public HSSFWorkbook dateToExcel(String fileName,List<String> titles,List<Map<String,Object>> dateMaps){
		
		//创建工作簿
		HSSFWorkbook workbook = new HSSFWorkbook();
		//创建工作表
		HSSFSheet sheet = workbook.createSheet();
		//创建单元格样式 ,首先生成一个样式
		HSSFCellStyle cellStyle = workbook.createCellStyle();
		//设置这些样式
		cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中 
		cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中 
		// 背景色
//		cellStyle.setFillForegroundColor(HSSFColor.GREEN.index);
//		cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); 
//		cellStyle.setFillBackgroundColor(HSSFColor.GREEN.index);
		//设置边框
		cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框    
		cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框    
		cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框    
		cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框    
		//自动换行
		cellStyle.setWrapText(true);
		//生成一个字体
		HSSFFont font = workbook.createFont();//设置字体大小
		font.setFontHeightInPoints((short) 12); // 字体高度
		font.setFontName("宋体"); // 字体
		//把字体应用到当前样式
		cellStyle.setFont(font);
		//创建行
		HSSFRow row;
		row = sheet.createRow(0);
		//设置表头
		for (int i = 0; i < titles.size(); i++) {
			HSSFCell cell = row.createCell(i);
			cell.setCellValue(titles.get(i));
			cell.setCellStyle(cellStyle);
			//设置列宽
			sheet.setColumnWidth(i, 3766);
		}
		//填充数据
		for (int i = 0; i < dateMaps.size(); i++) {
			Map<String, Object> map = dateMaps.get(i);
			//第一行是表头  数据要从第二行开始
			row = sheet.createRow(i+1);
			//第一种遍历map的方法,通过加强for循环map.keySet(),然后通过键key获取到value值
			int cellNumber = 0;
			for (String s : map.keySet()) {
				System.out.println("key : " + s + " value : " + map.get(s));
				//创建单元格并赋值
				HSSFCell cell = row.createCell(cellNumber);
				cell.setCellValue((String)map.get(s));
				cell.setCellStyle(cellStyle);
				cellNumber++;
			}
		}
		return workbook;
	}

2.controller方法


	/**
	 * Purpose:导出全部
	 * @author JaxWan
	 * @param req
	 * @return IZrarResponse
	 */
	public IZrarResponse exportExcelData(IZrarRequest req) {
		IZrarResponse res = new ZrarResponse();

		String airport = req.getParameter("airport");
		String flightdate = req.getParameter("flightDate");
		String disType = req.getParameter("disType");
		
		String sql = " select flt_aid,schd_dpt_dt_old,schd_dpt_dt_new,schd_dpt_dt1,estmt_dpt_dt_old,estmt_dpt_dt_new,estmt_dpt_dt1,dpt_tm_old,dpt_tm_new,dpt_tm1, "
				+ " schd_arrv_dt_old,schd_arrv_dt_new,schd_arrv_dt1,estmt_arrv_dt_old,estmt_arrv_dt_new,estmt_arrv_dt1,arrv_dt_old,arrv_dt_new,arrv_dt1, flt_stat_chn_nm,air_crft_typ_cd,flight_date,"
				+ " xml_info,copy_xml_info "
				+ " from w_source_test where 1=1 ";
		if(StringUtil.isNull(flightdate)){
			flightdate = DateUtil.dateToString(1, new Date());
		}
		if(StringUtil.isNotNull(flightdate)){
			sql += " and flight_date like '"+ flightdate +"%'";
		}
		if(StringUtil.isNotNull(airport)&&!"null".equals(airport)){
			sql += " and airport = '"+ airport+"'";
		}
		String comSql = sql;
		if(StringUtil.isNotNull(disType)&&!"0".equals(disType)){
			comSql += " and type = '"+ disType+"'";
		}
		List<Map<String, Object>> flights1 = dao.getMapList(comSql);

		
		List<String> titles = new ArrayList<String>();
		titles.add("航班号");
//		titles.add("类别");
		titles.add("计飞old");
		titles.add("计飞new");
		titles.add("计飞差");
		titles.add("预飞old");
		titles.add("预飞new");
		titles.add("预飞差");
		titles.add("实飞old");
		titles.add("实飞new");
		titles.add("实飞差");
		titles.add("计达old");
		titles.add("计达new");
		titles.add("计达差");
		titles.add("预达old");
		titles.add("预达new");
		titles.add("预达差");
		titles.add("实达old");
		titles.add("实达new");
		titles.add("实达差");
		titles.add("状态");
		titles.add("机型");
		titles.add("更新时间");
		
		String fileName  = "xxx对比结果";
		HSSFWorkbook workbook = this.dateToExcel(fileName, titles, flights1);
		try {
			HttpServletResponse response = (HttpServletResponse) ThreadPool.get(SysConstant.HTTP_RESPONSE);
			//发送响应流方法
			fileName = new String(fileName.getBytes(), "ISO8859-1");
			response.setContentType("application/octet-stream;charset=utf-8");
			response.setHeader("Content-Disposition", "attachment;filename=" + fileName+".xls");
			response.addHeader("Pargam", "no-cache");
			response.addHeader("Cache-Control", "no-cache");
			OutputStream os = response.getOutputStream();
			workbook.write(os);
			os.flush();
			os.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}  
		return res;
	}

3.jsp直接调用即可

<a href="flightsInterfaceBLH_exportExcelData.do?" >导出全部</a>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

buyaopingbixiazai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值