Java如何利用POI实现导入导出Excel表格

工具使用   发布日期:2025年03月22日   浏览次数:391

这篇文章主要介绍“Java如何利用POI实现导入导出Excel表格”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java如何利用POI实现导入导出Excel表格”文章能帮助大家解决问题。

一、Java利用POI实现导入导出Excel表格demo

1.引入依赖

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

2.导入demo

2.1 controller层

  1. /**
  2. * Excel导入
  3. */
  4. @PostMapping("/import")
  5. public Result userImport2(@RequestParam("file") MultipartFile file) throws Exception{
  6. Result result=userService.userImportExcel(file);
  7. return result;
  8. }

2.2 service实现类层

  1. public Result userImportExcel(MultipartFile file){
  2. try {
  3. InputStream inputStream = file.getInputStream();
  4. XSSFWorkbook sheets = new XSSFWorkbook(inputStream);
  5. //获取表单sheet 第一个
  6. XSSFSheet sheetAt = sheets.getSheetAt(0);
  7. //获取第一行
  8. int firstRowNum = sheetAt.getFirstRowNum();
  9. //最后一行
  10. int lastRowNum = sheetAt.getLastRowNum();
  11. //存入数据集合
  12. List<User> users=new ArrayList<>();
  13. //遍历数据
  14. for(int i=firstRowNum+1;i<lastRowNum+1;i++){
  15. XSSFRow row = sheetAt.getRow(i);
  16. if(row!=null){
  17. /* //获取第一行的第一列
  18. int firstCellNum = row.getFirstCellNum();
  19. //获取第一行的最后列
  20. short lastCellNum = row.getLastCellNum();
  21. for (int j=firstCellNum;j<lastCellNum+1;j++){
  22. //放入集合中需要可以用这种方法
  23. String cellValue = getValue(row.getCell(firstCellNum));
  24. }*/
  25. //这里我就直接赋值
  26. User user = new User();
  27. user.setUname(row.getCell(0).getStringCellValue());
  28. user.setUpassword(row.getCell(1).getStringCellValue());
  29. user.setUsex(row.getCell(2).getStringCellValue());
  30. user.setRole(row.getCell(3).getStringCellValue());
  31. user.setUlove((int) row.getCell(4).getNumericCellValue());
  32. user.setUphoto(row.getCell(5).getStringCellValue());
  33. user.setUaddress(row.getCell(6).getStringCellValue());
  34. users.add(user);
  35. }
  36. }
  37. //保存数据
  38. saveBatch(users);
  39. return Result.success();
  40. }catch (Exception e){
  41. e.printStackTrace();
  42. log.info("error:{}",e);
  43. }
  44. return Result.error("300","导入失败");
  45. }
  46. /**
  47. * 判断值的类型
  48. */
  49. public String getValue(HSSFCell cell) {
  50. if(cell==null){
  51. return "";
  52. }
  53. String cellValue= "";
  54. try {
  55. DecimalFormat df=new DecimalFormat("0.00");
  56. if(cell.getCellType()== CellType.NUMERIC){
  57. //日期时间转换
  58. if(HSSFDateUtil.isCellDateFormatted(cell)){
  59. cellValue=DateFormatUtils.format(cell.getDateCellValue(),"yyyy-MM-dd");
  60. }else{
  61. NumberFormat instance = NumberFormat.getInstance();
  62. cellValue=instance.format(cell.getNumericCellValue()).replace(",","");
  63. }
  64. }else if(cell.getCellType() == CellType.STRING){
  65. //字符串
  66. cellValue=cell.getStringCellValue();
  67. }else if(cell.getCellType() == CellType.BOOLEAN){
  68. //Boolean
  69. cellValue= String.valueOf(cell.getBooleanCellValue());
  70. }else if(cell.getCellType() == CellType.ERROR){
  71. //错误
  72. }else if(cell.getCellType() == CellType.FORMULA){
  73. //转换公式 保留两位
  74. cellValue=df.format(cell.getNumericCellValue());
  75. }else{
  76. cellValue=null;
  77. }
  78. } catch (Exception e) {
  79. e.printStackTrace();
  80. cellValue="-1";
  81. }
  82. return cellValue;
  83. }

3.导出demo

3.1 controller层

  1. /**
  2. * 导出
  3. * @param response
  4. * @return
  5. * @throws Exception
  6. */
  7. @GetMapping("/export")
  8. public Result userExport2(HttpServletResponse response) throws Exception{
  9. Result result=userService.userExportExcel(response);
  10. return result;
  11. }

3.2 service实现类

  1. public Result userExportExcel(HttpServletResponse response) {
  2. try {
  3. //创建excel
  4. XSSFWorkbook sheets = new XSSFWorkbook();
  5. //创建行
  6. XSSFSheet sheet = sheets.createSheet("用户信息");
  7. //格式设置
  8. XSSFCellStyle cellStyle = sheets.createCellStyle();
  9. //横向居中
  10. cellStyle.setAlignment(HorizontalAlignment.CENTER);
  11. //创建单元格第一列
  12. XSSFRow row = sheet.createRow(0);
  13. //表头
  14. this.titleExcel(row,cellStyle);
  15. //查询全部的用户数据 mybatis-plus
  16. List<User> list = list();
  17. //遍历设置值
  18. for(int i=0;i<list.size();i++){
  19. XSSFRow rows = sheet.createRow(i+1);
  20. User user=list.get(i);
  21. //表格里赋值
  22. this.titleExcelValue(user,rows,cellStyle);
  23. }
  24. //设置浏览器响应格式
  25. response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
  26. String filName= URLEncoder.encode("用户信息","UTF-8");
  27. response.setHeader("Content-Disposition","attachment;filename="+filName+".xls");
  28. ServletOutputStream outputStream=response.getOutputStream();
  29. sheets.write(outputStream);
  30. outputStream.close();
  31. sheets.close();
  32. return Result.success();
  33. }catch (Exception e){
  34. e.printStackTrace();
  35. log.info("error:{}",e);
  36. }
  37. return Result.error("300","导出失败");
  38. }
  39. /**
  40. *表格里赋值
  41. **/
  42. public void titleExcelValue(User user, XSSFRow row,XSSFCellStyle cellStyle) {
  43. XSSFCell cellId = row.createCell(0);
  44. cellId.setCellValue(user.getUid());
  45. cellId.setCellStyle(cellStyle);
  46. XSSFCell cellUserName = row.createCell(1);
  47. cellUserName.setCellValue(user.getUname());
  48. cellUserName.setCellStyle(cellStyle);
  49. XSSFCell cellPassword = row.createCell(2);
  50. cellPassword.setCellValue(user.getUpassword());
  51. cellPassword.setCellStyle(cellStyle);
  52. XSSFCell cellSex = row.createCell(3);
  53. cellSex.setCellValue(user.getUsex());
  54. cellSex.setCellStyle(cellStyle);
  55. XSSFCell cellRole = row.createCell(4);
  56. cellRole.setCellValue(user.getRole());
  57. cellRole.setCellStyle(cellStyle);
  58. XSSFCell cellLoveValue = row.createCell(5);
  59. cellLoveValue.setCellValue(user.getRole());
  60. cellLoveValue.setCellStyle(cellStyle);
  61. XSSFCell cellPhone = row.createCell(6);
  62. cellPhone.setCellValue(user.getUphoto());
  63. cellPhone.setCellStyle(cellStyle);
  64. XSSFCell cellAddress = row.createCell(7);
  65. cellAddress.setCellValue(user.getUaddress());
  66. cellAddress.setCellStyle(cellStyle);
  67. }
  68. /**
  69. 表头
  70. **/
  71. public void titleExcel(XSSFRow row,XSSFCellStyle cellStyle){
  72. XSSFCell cellId = row.createCell(0);
  73. cellId.setCellValue("用户ID");
  74. cellId.setCellStyle(cellStyle);
  75. XSSFCell cellUserName = row.createCell(1);
  76. cellUserName.setCellValue("用户名");
  77. cellUserName.setCellStyle(cellStyle);
  78. XSSFCell cellPassword = row.createCell(2);
  79. cellPassword.setCellValue("密码");
  80. cellPassword.setCellStyle(cellStyle);
  81. XSSFCell cellSex = row.createCell(3);
  82. cellSex.setCellValue("性别");
  83. cellSex.setCellStyle(cellStyle);
  84. XSSFCell cellRole = row.createCell(4);
  85. cellRole.setCellValue("角色");
  86. cellRole.setCellStyle(cellStyle);
  87. XSSFCell cellLoveValue = row.createCell(5);
  88. cellLoveValue.setCellValue("爱心值");
  89. cellLoveValue.setCellStyle(cellStyle);
  90. XSSFCell cellPhone = row.createCell(6);
  91. cellPhone.setCellValue("电话号码");
  92. cellPhone.setCellStyle(cellStyle);
  93. XSSFCell cellAddress = row.createCell(7);
  94. cellAddress.setCellValue("地址");
  95. cellAddress.setCellStyle(cellStyle);
  96. }

二、Hutool工具类封装方法导出导入Excel

1.引入依赖

把poi封装到工具类方法里面

  1. <!-- hutool -->
  2. <dependency>
  3. <groupId>cn.hutool</groupId>
  4. <artifactId>hutool-all</artifactId>
  5. <version>5.7.20</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>org.apache.poi</groupId>
  9. <artifactId>poi-ooxml</artifactId>
  10. <version>4.1.2</version>
  11. </dependency>

2.导入demo

  1. /**
  2. * Excel导入
  3. */
  4. @PostMapping("/import")
  5. public Result userImport(@RequestParam("file") MultipartFile file) throws Exception{
  6. System.out.println(file.toString());
  7. //InputStream inputStream = multipartFile.getInputStream();
  8. InputStream inputStream = file.getInputStream();
  9. ExcelReader reader = ExcelUtil.getReader(inputStream);
  10. //读取表的内容
  11. List<List<Object>> list = reader.read(1);
  12. List<User> users = new ArrayList<>();
  13. for(List<Object> row : list){
  14. User user = new User();
  15. user.setUname(row.get(0).toString());
  16. user.setUpassword(row.get(1).toString());
  17. user.setUsex(row.get(2).toString());
  18. user.setRole(row.get(3).toString());
  19. user.setUlove(Integer.valueOf(row.get(4).toString()));
  20. user.setUphoto(row.get(5).toString());
  21. user.setUaddress(row.get(6).toString());
  22. users.add(user);
  23. }
  24. //批量插入用户信息 mybatis-plus
  25. userService.saveBatch(users);
  26. return Result.success();
  27. }

3.导出demo

  1. /**
  2. * Excel导出 方法一
  3. */
  4. @GetMapping("/export")
  5. public Result userExport(HttpServletResponse response) throws Exception{
  6. //查询全部的用户数据
  7. List<User> list = userService.list();
  8. //在内存里做操作,保存到浏览器
  9. ExcelWriter writer = ExcelUtil.getWriter(true);
  10. //自定义标题别名
  11. writer.addHeaderAlias("uname","用户名");
  12. writer.addHeaderAlias("upassword","密码");
  13. writer.addHeaderAlias("usex","性别");
  14. writer.addHeaderAlias("role","角色");
  15. writer.addHeaderAlias("ulove","爱心值");
  16. writer.addHeaderAlias("uphoto","电话号码");
  17. writer.addHeaderAlias("uaddress","地址");
  18. //一次性写出list内的对象的Excel,使用默认样式,强制输出标题
  19. writer.write(list,true);
  20. //设置浏览器响应格式
  21. response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
  22. String filName= URLEncoder.encode("用户信息","UTF-8");
  23. response.setHeader("Content-Disposition","attachment;filename="+filName+".xls");
  24. ServletOutputStream outputStream=response.getOutputStream();
  25. writer.flush(outputStream,true);
  26. outputStream.close();
  27. writer.close();
  28. return Result.success();
  29. }

以上就是Java如何利用POI实现导入导出Excel表格的详细内容,更多关于Java如何利用POI实现导入导出Excel表格的资料请关注九品源码其它相关文章!