【小白做项目Java】——POI导入和导出 execl文件
2017-07-21 17:04
465 查看
前提
在项目遇到要求上传并且能解析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对象。其余的操作就是一些方法的操作,知道大概方向就好!多做一点,多知道一点,没有哪一种经历是一无所获的。相关文章推荐
- 【小白做项目Java】——POI导入和导出 execl文件
- JAVA实用案例之文件导入导出(POI方式)
- java项目中Excel文件的导入导出
- java对execl的导入、导出操作-- POI / JXL .
- java项目中Excel文件的导入导出
- java学习之--导入导出excel文件 通过poi
- 使用POI实现在java程序中导入导出Excel文件数据
- java对execl的导入、导出操作-- POI / JXL
- java项目中Excel文件的导入导出
- 【JavaWeb开发】使用java实现简单的Excel文件的导入与导出(POI)
- java项目中Excel文件的导入导出
- asp.net中Execl文件的导入导出
- Java程序员从笨鸟到菜鸟之(一百零四)java操作office和pdf文件(二)利用POI实现数据导出excel报表
- Java程序员从笨鸟到菜鸟之(一百零五)java操作office和pdf文件(三)利用jxl实现数据导出excel报表以及与POI的区别
- Java程序员从笨鸟到菜鸟之(一百零四)java操作office和pdf文件(二)利用POI实现数据导出excel报表
- zz 导入项目R.java文件没有生成
- java导入导出Excel文件
- Myeclipse的使用方法-导入、导出Java 项目
- java利用poi对excel进行操作可导入导出
- 关于Java对象与XML文件的导入和导出