Java实现数据导出功能!

本文展示了如何在Java中使用Apache POI库来导出Excel文件。首先在pom.xml中引入POI依赖,然后在业务代码中创建并填充数据,包括日期格式化和状态转换。最后,调用自定义的`ExportExcelLXT`工具类完成Excel的生成与下载,该工具类创建工作簿、设置表头和数据,并通过Http响应发送给客户端。

废话不多说直接贴代码:

第一部分:

首先去你maven项目下面找到pom.xml文件下引入依赖

	   <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.10-FINAL</version>
        </dependency>
第二部分:

主要代码块(其中包含了我的业务代码懒得删了,你们参考的时候忽略掉就可以)

	/**
	 * @creator: 李咸通
	 * @creationtime: 2002-8-2-16:23 ok
	 */
	@GetMapping("/exportdata")
	public void exportdata(HttpServletRequest request, HttpServletResponse response, Map<String, Object> map) {
		//这里是我的业务代码请忽略
		map.put("aId", getA_id());
		map.put("gsId", getCompanyId());
		
		//这里是我的数据源
		List<ZlInfoDO> list = htzlInfoService.listexportdata(map);
		
		//创建excel表头,这里是我的业务表头
		List<String> column = new ArrayList<>();
		column.add("客户姓名");
		column.add("房间全称");
		column.add("联系人");
		column.add("联系电话");
		column.add("起租日期");
		column.add("止租日期");
		column.add("交付日期");
		column.add("经办人");
		column.add("经办时间");
		column.add("合同编号");
		column.add("合同类别");
		column.add("复核状态");
		column.add("合同状态");

		//表头对应的数据
		List<Map<String, Object>> data = new ArrayList<>();

		//循环遍历你的数据源
		for (int i = 0; i < list.size(); i++) {
			Map<String, Object> dataMap = new HashMap<>();
			//get数据源
			ZlInfoDO zlinfolist = list.get(i);
			//下面是对日期值的处理
			//创建时间格式
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			//定义Data类型
			Date startDate = zlinfolist.getStartTime();
			Date endDate = zlinfolist.getEndTime();
			Date jiaofuDate = zlinfolist.getJiaofuTime();
			Date jingbanDate = zlinfolist.getJbsj();
			//初始化对应日期变量
			String starttiem="";
			String endtime="";
			String jiaofutime="";
			String jingbantime="";
			//避免日期为null错误,所以进行if判空处理>>>完成格式转换
			if(startDate!=null){
				 starttiem = sdf.format(startDate);
			}
			if(endDate!=null){
				 endtime = sdf.format(endDate);
			}
			if(jiaofuDate!=null){
				jiaofutime = sdf.format(jiaofuDate);
			}
			if(jingbanDate!=null){
				jingbantime = sdf.format(jingbanDate);
			}
			//复核状态转中文判断
			String fuhezhuangtai=zlinfolist.getCheckStatus();
			if(fuhezhuangtai.equals("0")){
				zlinfolist.setCheckStatus("未复核");
			}else{
				zlinfolist.setCheckStatus("已复核");
			}
			//合同状态转中文判断
			String hetongzhuangtai=zlinfolist.getHtStatus();
			if(hetongzhuangtai.equals("0")){
				zlinfolist.setHtStatus("正常");
			}else if(hetongzhuangtai.equals("1")){
				zlinfolist.setHtStatus("已终止");
			}else if(hetongzhuangtai.equals("2")){
				zlinfolist.setHtStatus("已过期");
			}else if(hetongzhuangtai.equals("3")){
				zlinfolist.setHtStatus("审批中");
			}else if(hetongzhuangtai.equals("4")){
				zlinfolist.setHtStatus("审批完成");
			}else if(hetongzhuangtai.equals("5")){
				zlinfolist.setHtStatus("审批拒绝");
			}
			//这里是列对应数据
			dataMap.put("客户姓名", zlinfolist.getUserName());
			dataMap.put("房间全称", zlinfolist.getRFullname());
			dataMap.put("联系人", zlinfolist.getLinkman());
			dataMap.put("联系电话", zlinfolist.getTelphone());
			dataMap.put("起租日期", starttiem);
			dataMap.put("止租日期", endtime);
			dataMap.put("交付日期", jiaofutime);
			dataMap.put("经办人", zlinfolist.getJbr());
			dataMap.put("经办时间", jingbantime);
			dataMap.put("合同编号", zlinfolist.getHtBh());
			dataMap.put("合同类别", zlinfolist.getHtClass());
			dataMap.put("复核状态", zlinfolist.getCheckStatus());
			dataMap.put("合同状态", zlinfolist.getHtStatus());
			//把此map添加到data
			data.add(dataMap);
		}

		//调用工具类并对应传参
		ExportExcelLXT.exportExcel("租赁合同信息表", column, data, request, response);

	};
第三部分:

下面是第二部分中最后一行代码调用的工具类,你只需要新建一个.java文件拷贝进去就可以了

public class ExportExcelLXT {
    /**
     * @param sheetName excel表名
     * @param column  列名
     * @param data  导出的数据
     * @param response
     */
    public static void exportExcel(String sheetName, List<String> column, List<Map<String,Object>> data, HttpServletRequest request, HttpServletResponse response){
        //创建工作薄
        HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
        //创建sheet
        HSSFSheet sheet = hssfWorkbook.createSheet(sheetName);
        // 表头
        HSSFRow headRow = sheet.createRow(0);
        for (int i = 0; i < column.size(); i++){
            headRow.createCell(i).setCellValue(column.get(i));
        }

        for (int i = 0; i < data.size(); i++) {
            HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum() + 1);
            for (int x = 0; x < column.size(); x++) {
                dataRow.createCell(x).setCellValue(data.get(i).get(column.get(x))==null?"":data.get(i).get(column.get(x)).toString());
            }
        }

        response.setContentType("application/vnd.ms-excel");

        try {
            //获取浏览器名称
            String agent=request.getHeader("user-agent");
            String filename=sheetName+".xls";
            //不同浏览器需要对文件名做特殊处理
            if (agent.contains("Firefox")) { // 火狐浏览器
                filename = "=?UTF-8?B?"
                        + new BASE64Encoder().encode(filename.getBytes("utf-8"))
                        + "?=";
                filename = filename.replaceAll("\r\n", "");
            } else { // IE及其他浏览器
                filename = URLEncoder.encode(filename, "utf-8");
                filename = filename.replace("+"," ");
            }
            //推送浏览器
            response.setHeader("Content-Disposition","attachment;filename="+filename);
            hssfWorkbook.write(response.getOutputStream());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
PS:难免有大佬无意间观看此文章,如大佬有更优方案可在下方评论指出,谢谢😀
本文章内容为作者通过实际代码落地并测试能够实现导出功能方才分享给大家学习和参考。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值