【小白做项目Java】——POI导入和导出 execl文件

前提

    在项目遇到要求上传并且能解析Excel文件的功能。在这个功能利用Apache POI刚好能完美解决。

何为POI

   Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。

HSSF概况

    HSSF是Horrible SpreadSheet Format的缩写,通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。关于本文中涉及到Execl的导出和导入使用的是HSSFWorkBook对象。

    使用POI,需要在项目中引入关于POI的jar包。例如(poi-3.9-20121203.jar)

导入

计算机中文件的传输都是以流来传输了,所以接收到上传的execl文件,本质上也是流。

	/**
	* @Title: importXls
	* @Description: 批量导入
	* @author 贾文静
	* @return
	 * @throws IOException 
	 * @throws FileNotFoundException 
	* @throws
	* @date:2017年7月10日.下午4:25:27
	 */
	public String importXls() throws Exception{
		String flag = "1";
		//使用POI解析execl文件
		try {
			HSSFWorkbook hssfWorkbook = new HSSFWorkbook(new FileInputStream(myFile));
			//获得第一个sheet页
			HSSFSheet sheet = hssfWorkbook.getSheetAt(0);
			List<Region> list = new ArrayList<Region>();
			for (Row row : sheet) {
				int rowNum = row.getRowNum();
				if (rowNum == 0) {
					//第一行,标题行,忽略
					continue;
				}
				//以行为单位,解析数据
				String id = row.getCell(0).getStringCellValue();
				String province = row.getCell(1).getStringCellValue();
				String city = row.getCell(2).getStringCellValue();
				String district = row.getCell(3).getStringCellValue();
				String postcode = row.getCell(4).getStringCellValue();
				list.add(region);
			}
			//存入解析之后的数据
			regionService.saveBatch(list);
		} catch (Exception e) {
			flag = "0";
		}
		//文件格式设置
		ServletActionContext.getResponse().setContentType("text/html;charset=utf-8");
		//是否导入成功的标识
		ServletActionContext.getResponse().getWriter().print(flag);
		return NONE;
	}

导出

    相对导入,导出功能会相对复杂一些,涉及execl文件的创建,sheet的创建,还表头标题的创建,以及名称的创建等等。但是总体上来说使用POI解决还是非常容易的。具体的见代码吧。

/*
	 * 使用POI写入Execl文件提供下载
	 * 贾文静-2017年7月21日17:03:35
	 */
	public String exportXls() throws IOException{
		//查询要导出的数据放入list
		List<Subarea> list = subareaService.findAll();
		
		//在内存中创建一个Execl文件,通过输出流写到客户端提供下载
		HSSFWorkbook workbook = new HSSFWorkbook();
		//创建一个sheet页
		HSSFSheet sheet = workbook.createSheet("分区数据");
		//创建标题行
		HSSFRow headRow = sheet.createRow(0);
		headRow.createCell(0).setCellValue("分区编号");
		headRow.createCell(1).setCellValue("区域编号");
		headRow.createCell(2).setCellValue("地址关键字");
		headRow.createCell(3).setCellValue("省市区");
		//循环在execl中放入数据
		for (Subarea subarea : list) {
			HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum()+1);
			dataRow.createCell(0).setCellValue(subarea.getId());
			dataRow.createCell(1).setCellValue(subarea.getRegion().getId());
			dataRow.createCell(2).setCellValue(subarea.getAddresskey());
			Region region = subarea.getRegion();
			dataRow.createCell(3).setCellValue(region.getProvince()+region.getCity()+region.getDistrict());
		}
		String filename = "分区数据.xls";
		String agent = ServletActionContext.getRequest().getHeader("User-Agent");
		String encodeDownloadFilename = FileUtils.encodeDownloadFilename(filename, agent);
		//下载输入内容的设置
		//一个流两个头 输出流,输出文件格式,输出文件名称
		ServletOutputStream out = ServletActionContext.getResponse().getOutputStream();
		//根据文件名称判断文件编码格式
		String contentType = ServletActionContext.getServletContext().getMimeType(filename);
		ServletActionContext.getResponse().setContentType(filename);
		//下载设置
		ServletActionContext.getResponse().setHeader("content-disposition", "attchment;filename="+filename);
		workbook.write(out);
		return NONE;
		
	}

【总结】

    只要用过就是很简单的内容,利用封装的函数实现execl文件的读取和写入。其中关键是HSSFWorkBook,其本质就是创建了一个Execl对象。其余的操作就是一些方法的操作,知道大概方向就好!多做一点,多知道一点,没有哪一种经历是一无所获的。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 59
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 59
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Mandy_i

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

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

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

打赏作者

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

抵扣说明:

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

余额充值