使用POI导入导出Excel表格

使用POI前需要先导入POI的jar包
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi</artifactId>
			<version>3.11</version>
		</dependency>

一、导入Excel表格中的数据

1、首先显将excel文件上传到服务器上,拿struts为例,使用上传文件的属性驱动,并生成setter方法

	//文件上传的属性驱动
	private File regionFile;
	public void setRegionFile(File regionFile) {
		this.regionFile = regionFile;
	}

2、创建HSSFWorkbook对象,将文件作为流传入构造函数中,然后从HSSFWorkbook对象中获取sheet表,再从表中依次取出每行的数据,在循环从每行中取出单元格中的数据。依次存入实体类中,将实体类作为一条记录保存到数据库中。详情如下:

	public String importXls() throws Exception {
		List<Region> listRegion = new ArrayList<Region>();
		//创建excel文件对象
		HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(regionFile));
		//获取sheet工作表
		HSSFSheet sheet = workbook.getSheet("sheet1");
		for (Row row : sheet) {
			//去掉excel表中的标题行
			if (row.getRowNum() == 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();
			Region region = new Region(id, province, city, district, postcode, null, null, null);
			listRegion.add(region);
		}
		//为了避免重复数据插入的错误,使用hibernate的saveOrUpdate方法
		regionService.saveOrUpdate(listRegion);
		return NONE;
	}

二、导出数据库中数据到excel表格中

1、将要导入的数据从数据库中查出。

2、将分区数据导入excel文件中。首先通过HSSFWorkbook创建一个空的工作簿对象,然后通过这个对象的createSheet()方法创建工作表,通过工作表的Row和Cell循环将数据写入到工作表中。

	public String exportXls() throws IOException {
		//第一步、查询出所有分区数据
		List<Subarea> listSubarea = subareaService.findAll();
		
		//第二步、将分区数据导入到excel文件中
		//创建一个空的excel文件
		HSSFWorkbook workbook = new HSSFWorkbook();
		//创建一个excel的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("位置信息");
		headRow.createCell(4).setCellValue("所在地区");
		for (Subarea subarea : listSubarea) {
			HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum() + 1);
			dataRow.createCell(0).setCellValue(subarea.getId());
			dataRow.createCell(1).setCellValue(subarea.getStartnum());
			dataRow.createCell(2).setCellValue(subarea.getEndnum());
			dataRow.createCell(3).setCellValue(subarea.getPosition());
			dataRow.createCell(4).setCellValue(subarea.getRegion().getName());
		}
		//第三步、使用输出流将excel文件下载到客户端(两头一流)
		String filename = "分区数据表.xls";
		//获取.xls文件的mime类型
		String mimeType = ServletActionContext.getServletContext().getMimeType(filename);
		//获取客户端浏览器类型,并对下载的文件名进行编码
		String agent = ServletActionContext.getRequest().getHeader("User-Agent");
		filename = FileUtils.encodeDownloadFilename(filename, agent);
		//设置两头一流
		ServletActionContext.getResponse().setContentType(mimeType);
		ServletActionContext.getResponse().setHeader("content-disposition", "attachment;filename=" + filename);
		ServletOutputStream outputStream = ServletActionContext.getResponse().getOutputStream();
		workbook.write(outputStream);
		return NONE;
	}

3、将工作簿对象以流的形式传送到客户端(俩头一流)

		//设置两头一流
		ServletActionContext.getResponse().setContentType(mimeType);
		ServletActionContext.getResponse().setHeader("content-disposition", "attachment;filename=" + filename);
		ServletOutputStream outputStream = ServletActionContext.getResponse().getOutputStream();




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值