• JavaExcel导入导出读取


    引入maven依赖

    1. <dependency>
    2. <groupId>org.apache.poigroupId>
    3. <artifactId>poiartifactId>
    4. <version>4.0.0version>
    5. dependency>
    6. <dependency>
    7. <groupId>org.apache.poigroupId>
    8. <artifactId>poi-ooxmlartifactId>
    9. <version>4.0.0version>
    10. dependency>

    利用FileMagic对文件格式进行判断

    1. public ResResult importExcel(MultipartFile file) {
    2. try {
    3. InputStream in = new BufferedInputStream(file.getInputStream());
    4. /**
    5. * 优化excel类型判断
    6. * 注意可能会获取报错 getFileMagic() only operates on streams which support mark(int)
    7. * 原因,BufferedInputStream中markSupported方法返回值为false造成的InputStream中返回值是true,所以改为InputStream is = new BufferedInputStream(multipartFile.getInputStream())
    8. */
    9. FileMagic fileMagic = FileMagic.valueOf(in);
    10. if (Objects.equals(fileMagic, FileMagic.OLE2)) {
    11. return importExcelXLS(file); // 这是xls
    12. } else if (Objects.equals(fileMagic, FileMagic.OOXML)) {
    13. return importExcelXLSX(file); // 这是xlsx
    14. }
    15. } catch (Exception e) {
    16. e.printStackTrace();
    17. }
    18. return ResResult.fail("导入异常!");
    19. }

    HSSFWorkbook

    读取xls文件,97-2003版本的excel

    1. package com.excel;
    2. import org.apache.poi.hssf.usermodel.HSSFSheet;
    3. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    4. import org.apache.poi.ss.usermodel.Cell;
    5. import org.apache.poi.ss.usermodel.Row;
    6. import java.io.File;
    7. import java.io.FileInputStream;
    8. import java.io.IOException;
    9. import java.util.ArrayList;
    10. import java.util.List;
    11. /**
    12. * 一个EXCEL包含如下几个基础组成
    13. * HSSFSheet:表单,通过HSSFWorkbook获取
    14. * Row:行,通过HSSFSheet获取
    15. * Cell:单元格,通过Row获取
    16. * 下标均从0开始
    17. * 导入97-2003版本的excel,xls格式
    18. * */
    19. public ResResult importExcelXLS(MultipartFile file) throws FileNotFoundException {
    20. if (file.isEmpty()) {
    21. return ResResult.fail("文件为空!");
    22. }
    23. InputStream inputStream = null;
    24. try {
    25. inputStream = file.getInputStream();
    26. HSSFWorkbook wb = new HSSFWorkbook(inputStream);
    27. // 获取sheet页数
    28. int sheetNum = wb.getNumberOfSheets();
    29. for (int i=0;i
    30. Sheet sheet = wb.getSheetAt(i);
    31. for (int rowNum=1;rowNum<=sheet.getLastRowNum();rowNum++) {
    32. // 获取行数
    33. Row row = sheet.getRow(rowNum);
    34. log.warn("开始读取第"+(i+1)+"个Sheet!第"+rowNum+"行!该行一共"+row.getLastCellNum()+"列!");
    35. Cell orderNumber = row.getCell(1);
    36. if (null != orderNumber) {
    37. orderNumber.setCellType(CellType.STRING);
    38. orderDelivery.setOrderNumber(orderNumber.getStringCellValue());
    39. }
    40. Cell deliveryName = row.getCell(2);
    41. if (null != deliveryName) {
    42. deliveryName.setCellType(CellType.STRING);
    43. orderDelivery.setDeliveryName(deliveryName.getStringCellValue());
    44. }
    45. }
    46. } catch (IOException e) {
    47. log.error("excel文件读取异常:"+ e);
    48. e.printStackTrace();
    49. return ResResult.fail("导入异常,请咨询管理员!");
    50. } finally {
    51. try {
    52. inputStream.close();
    53. } catch (IOException e) {
    54. log.error("excel文件流关闭异常:"+ e);
    55. e.printStackTrace();
    56. return ResResult.fail("导入异常,请咨询管理员!");
    57. }
    58. }
    59. }

    XSSFWorkbook

    读取xlsx文件,高于2003版本的excel,读写均与HSSFWorkbook保持一致

    或者直接使用开源组件Excel-Boot

    GitHub - programmeres/excel-boot: Easy-POI是一款Excel导入导出解决方案组成的轻量级开源组件。

    兼容

    1. Workbook workbook=null;
    2. if (is2003Excel){
    3. workbook= new HSSFWorkbook(inputStream);
    4. }else {
    5. workbook = new XSSFWorkbook(inputStream);
    6. }

  • 相关阅读:
    写字楼招商难、收租慢、管理乱?用快鲸智慧楼宇系统快速解决
    NPM 如何换源?
    IB经济与商业可以一起选吗?
    为什么说星越L Hi·P是一款全能的增程电动SUV?
    LLM增强LLM;通过预测上下文来提高文生图质量;Spikformer V2;同时执行刚性和非刚性编辑的通用图像编辑框架
    绿色计算产业发展白皮书:2022年OceanBase助力蚂蚁集团减排4392tCO2e
    【ROS】机械人开发一--树莓派安装ubuntu18.04
    项目介绍:“WeTalk”网页聊天室
    JAVA中常用的10个Lambda表达式
    MySQL---优化&日志
  • 原文地址:https://blog.csdn.net/gaoxiang24/article/details/127877579