使用POI导入导出Excel表格

Love The Way You Lie 2022-06-10 02:37 553阅读 0赞

使用POI前需要先导入POI的jar包

  1. <dependency>
  2. <groupId>org.apache.poi</groupId>
  3. <artifactId>poi</artifactId>
  4. <version>3.11</version>
  5. </dependency>

一、导入Excel表格中的数据

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

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

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

  1. public String importXls() throws Exception {
  2. List<Region> listRegion = new ArrayList<Region>();
  3. //创建excel文件对象
  4. HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(regionFile));
  5. //获取sheet工作表
  6. HSSFSheet sheet = workbook.getSheet("sheet1");
  7. for (Row row : sheet) {
  8. //去掉excel表中的标题行
  9. if (row.getRowNum() == 0){
  10. continue;
  11. }
  12. String id = row.getCell(0).getStringCellValue();
  13. String province = row.getCell(1).getStringCellValue();
  14. String city = row.getCell(2).getStringCellValue();
  15. String district = row.getCell(3).getStringCellValue();
  16. String postcode = row.getCell(4).getStringCellValue();
  17. Region region = new Region(id, province, city, district, postcode, null, null, null);
  18. listRegion.add(region);
  19. }
  20. //为了避免重复数据插入的错误,使用hibernate的saveOrUpdate方法
  21. regionService.saveOrUpdate(listRegion);
  22. return NONE;
  23. }

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

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

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

  1. public String exportXls() throws IOException {
  2. //第一步、查询出所有分区数据
  3. List<Subarea> listSubarea = subareaService.findAll();
  4. //第二步、将分区数据导入到excel文件中
  5. //创建一个空的excel文件
  6. HSSFWorkbook workbook = new HSSFWorkbook();
  7. //创建一个excel的sheet表格
  8. HSSFSheet sheet = workbook.createSheet("分区数据表");
  9. //创建标题行
  10. HSSFRow headRow = sheet.createRow(0);
  11. headRow.createCell(0).setCellValue("分区编号");
  12. headRow.createCell(1).setCellValue("起始号");
  13. headRow.createCell(2).setCellValue("结束号");
  14. headRow.createCell(3).setCellValue("位置信息");
  15. headRow.createCell(4).setCellValue("所在地区");
  16. for (Subarea subarea : listSubarea) {
  17. HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum() + 1);
  18. dataRow.createCell(0).setCellValue(subarea.getId());
  19. dataRow.createCell(1).setCellValue(subarea.getStartnum());
  20. dataRow.createCell(2).setCellValue(subarea.getEndnum());
  21. dataRow.createCell(3).setCellValue(subarea.getPosition());
  22. dataRow.createCell(4).setCellValue(subarea.getRegion().getName());
  23. }
  24. //第三步、使用输出流将excel文件下载到客户端(两头一流)
  25. String filename = "分区数据表.xls";
  26. //获取.xls文件的mime类型
  27. String mimeType = ServletActionContext.getServletContext().getMimeType(filename);
  28. //获取客户端浏览器类型,并对下载的文件名进行编码
  29. String agent = ServletActionContext.getRequest().getHeader("User-Agent");
  30. filename = FileUtils.encodeDownloadFilename(filename, agent);
  31. //设置两头一流
  32. ServletActionContext.getResponse().setContentType(mimeType);
  33. ServletActionContext.getResponse().setHeader("content-disposition", "attachment;filename=" + filename);
  34. ServletOutputStream outputStream = ServletActionContext.getResponse().getOutputStream();
  35. workbook.write(outputStream);
  36. return NONE;
  37. }

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

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

发表评论

表情:
评论列表 (有 0 条评论,553人围观)

还没有评论,来说两句吧...

相关阅读