经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Spring Boot » 查看文章
spring boot读取Excel操作示例
来源:jb51  时间:2019/11/5 12:44:39  对本文有异议

本文实例讲述了spring boot读取Excel操作。分享给大家供大家参考,具体如下:

首先引入相关依赖

  1. <!--解析office相关文件-->
  2. <dependency>
  3. <groupId>org.apache.poi</groupId>
  4. <artifactId>poi</artifactId>
  5. <version>3.17</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>org.apache.poi</groupId>
  9. <artifactId>poi-ooxml</artifactId>
  10. <version>3.17</version>
  11. </dependency>
  12. <!--解析office相关文件-->
  13.  

工具类

  1. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  2. import org.apache.poi.ss.usermodel.Cell;
  3. import org.apache.poi.ss.usermodel.Row;
  4. import org.apache.poi.ss.usermodel.Sheet;
  5. import org.apache.poi.ss.usermodel.Workbook;
  6. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  7. import org.slf4j.Logger;
  8. import org.slf4j.LoggerFactory;
  9. import org.springframework.web.multipart.MultipartFile;
  10. import java.io.FileNotFoundException;
  11. import java.io.IOException;
  12. import java.io.InputStream;
  13. import java.util.HashMap;
  14. import java.util.Map;
  15. public class OfficeUtils {
  16. protected static final Logger logger = LoggerFactory.getLogger(OfficeUtils.class);
  17. public static Map<Integer, Map<Integer, Object>> readExcelContentz(MultipartFile file) throws Exception {
  18. Map<Integer, Map<Integer, Object>> content = new HashMap<Integer, Map<Integer, Object>>();
  19. // 上传文件名
  20. Workbook wb = getWb(file);
  21. if (wb == null) {
  22. throw new BusinessException(ErrorType.WORK_BOOK_EMPTY);
  23. }
  24. Sheet sheet = wb.getSheetAt(0);
  25. // 得到总行数
  26. int rowNum = sheet.getLastRowNum();
  27. Row row = sheet.getRow(0);
  28. int colNum = row.getPhysicalNumberOfCells();
  29. // 正文内容应该从第二行开始,第一行为表头的标题
  30. for (int i = 1; i <= rowNum; i++) {
  31. row = sheet.getRow(i);
  32. int j = 0;
  33. Map<Integer, Object> cellValue = new HashMap<Integer, Object>();
  34. while (j < colNum) {
  35. Object obj = getCellFormatValue(row.getCell(j));
  36. cellValue.put(j, obj);
  37. j++;
  38. }
  39. content.put(i, cellValue);
  40. }
  41. return content;
  42. }
  43. //根据Cell类型设置数据
  44. private static Object getCellFormatValue(Cell cell) {
  45. Object cellvalue = "";
  46. if (cell != null) {
  47. switch (cell.getCellTypeEnum()) {
  48. case NUMERIC:
  49. cellvalue = String.valueOf(cell.getNumericCellValue());
  50. break;
  51. case FORMULA: {
  52. cellvalue = cell.getDateCellValue();
  53. break;
  54. }
  55. case STRING:
  56. cellvalue = cell.getRichStringCellValue().getString();
  57. break;
  58. default:
  59. cellvalue = "";
  60. }
  61. } else {
  62. cellvalue = "";
  63. }
  64. return cellvalue;
  65. }
  66. private static Workbook getWb(MultipartFile mf) {
  67. String filepath = mf.getOriginalFilename();
  68. String ext = filepath.substring(filepath.lastIndexOf("."));
  69. Workbook wb = null;
  70. try {
  71. InputStream is = mf.getInputStream();
  72. if (".xls".equals(ext)) {
  73. wb = new HSSFWorkbook(is);
  74. } else if (".xlsx".equals(ext)) {
  75. wb = new XSSFWorkbook(is);
  76. } else {
  77. wb = null;
  78. }
  79. } catch (FileNotFoundException e) {
  80. logger.error("FileNotFoundException", e);
  81. } catch (IOException e) {
  82. logger.error("IOException", e);
  83. }
  84. return wb;
  85. }
  86. }
  87.  

service层

  1. public Map<Integer, Map<Integer,Object>> addCustomerInfo(MultipartFile file) {
  2. Map<Integer, Map<Integer,Object>> map = new HashMap<>();
  3. try {
  4. map = ReadExcelUtil.readExcelContentz(file);
  5. } catch (Exception e) {
  6. e.printStackTrace();
  7. }
  8. //excel数据存在map里,map.get(0).get(0)为excel第1行第1列的值,此处可对数据进行处理
  9. }
  10.  

controller层

  1. @PostMapping
  2. public String add(@RequestParam("file")MultipartFile file){
  3. Map<Integer, Map<Integer,Object>> map = customerService.addCustomerInfo(file);
  4. return "success";
  5. }
  6.  

至此,基本完成Excel的解析。

更多关于java相关内容感兴趣的读者可查看jb51专题:《Spring框架入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号