-
java使用POI导入Excel ,工具类直接上代码
-
引入Maven
xml<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml-schemas</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.apache.xmlbeans</groupId> <artifactId>xmlbeans</artifactId> <version>3.1.0</version> </dependency>
-
如果不引入xmlbeans的话解析xlsx文件可能会报错:
- 我遇到的报错内容为:java.lang.NoSuchMethodError: org.apache.xmlbeans.XmlOptions.setEntityExpansionLimit(I)Lorg/apache/xmlbeans/XmlOptions
-
-
导入工具类的代码(代码仅供参考,根据自己需求修改,少的引入自行解决):
Javapackage com.zz.bzyw.utils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.zz.bzyw.config.common.BzywException; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFFormulaEvaluator; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.xmlbeans.impl.xb.xsdschema.Public; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.io.InputStream; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.*; /** * @author zzsoft */ @Slf4j public class ReadExcelUtil { //读取xls表格 public static void formatMap2007(List<Map<String, Object>> dataList, Sheet sheetName, XSSFWorkbook workbook){ int rowTotle = sheetName.getLastRowNum(); Row title = sheetName.getRow(1); Iterator<Cell> titleIte = title.cellIterator(); List<String> titleFields = new ArrayList<>(); while (titleIte.hasNext()){ Cell cell = titleIte.next(); String titleField = cell.getStringCellValue(); titleFields.add(titleField); } for (int i = 2; i <= rowTotle; i++) { Map<String, Object> rowMap = new HashMap<>(); for (int j = 0; j < titleFields.size(); j++) { try{ //获取行数据 Row row = sheetName.getRow(i); String rowKey = titleFields.get(j); Cell cloCell = row.getCell(j); if(cloCell != null){ /** * 暂时屏蔽 bug SCJZMJ = 62.68 此方法会自动将数值转为72。 暂屏蔽 2022.07.03 Edit.WangZhen * */ // else if ("YCJZMJ".equals(rowKey)){ // cloCell.setCellType(CellType.NUMERIC); // } else if ("GYTDMJ".equals(rowKey)){ // cloCell.setCellType(CellType.NUMERIC); // } else if ("SCJZMJ".equals(rowKey)){ // cloCell.setCellType(CellType.NUMERIC); // } String cellType = cloCell.getCellType().toString(); if("STRING".equals(cellType)){ rowMap.put(rowKey, cloCell.getStringCellValue()); }else if(DateUtil.isCellDateFormatted(cloCell)){ Date date = cloCell.getDateCellValue(); DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); rowMap.put(rowKey,dateFormat.format(date)); } else if("NUMERIC".equals(cellType)){ rowMap.put(rowKey, cloCell.getNumericCellValue()); } else if("BOOLEAN".equals(cellType)){ rowMap.put(rowKey,cloCell.getBooleanCellValue()); }else if("FORMULA".equals(cellType)){ XSSFFormulaEvaluator eva = new XSSFFormulaEvaluator(workbook); CellValue cellValue = eva.evaluate(cloCell); rowMap.put(rowKey, cellValue.getStringValue()); } } }catch (Exception exception) { log.info("excel表格读取报错: ", exception); } } if(rowMap.size() > 0){ dataList.add(rowMap); } } } //读取xlsx表格 public static void formatMap2003(List<Map<String, Object>> dataList, Sheet sheetName, HSSFWorkbook workbook){ int rowTotle = sheetName.getLastRowNum(); Row title = sheetName.getRow(1); Iterator<Cell> titleIte = title.cellIterator(); List<String> titleFields = new ArrayList<>(); while (titleIte.hasNext()){ Cell cell = titleIte.next(); String titleField = cell.getStringCellValue(); titleFields.add(titleField); } for (int i = 2; i <= rowTotle; i++) { Map<String, Object> rowMap = new HashMap<>(); for (int j = 0; j < titleFields.size(); j++) { try{ //获取行数据 Row row = sheetName.getRow(i); String rowKey = titleFields.get(j); Cell cloCell = row.getCell(j); if(cloCell != null){ String cellType = cloCell.getCellType().toString(); if("STRING".equals(cellType)){ rowMap.put(rowKey, cloCell.getStringCellValue()); }else if(DateUtil.isCellDateFormatted(cloCell)){ Date date = cloCell.getDateCellValue(); DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); rowMap.put(rowKey,dateFormat.format(date)); } else if("NUMERIC".equals(cellType)){ rowMap.put(rowKey, cloCell.getNumericCellValue()); } else if("BOOLEAN".equals(cellType)){ rowMap.put(rowKey,cloCell.getBooleanCellValue()); }else if("FORMULA".equals(cellType)){ HSSFFormulaEvaluator eva = new HSSFFormulaEvaluator(workbook); CellValue cellValue = eva.evaluate(cloCell); rowMap.put(rowKey, cellValue.getStringValue()); } } }catch (Exception exception) { log.info("excel表格读取报错: ", exception); } } if(rowMap.size() > 0){ dataList.add(rowMap); } } } //读取xls表格 public static void read2007(List<Map<String, Object>> dataList, Sheet sheetName, Integer titleRow, XSSFWorkbook workbook){ int rowTotle = sheetName.getLastRowNum(); Row title = sheetName.getRow(titleRow); Iterator<Cell> titleIte = title.cellIterator(); List<String> titleFields = new ArrayList<>(); while (titleIte.hasNext()){ Cell cell = titleIte.next(); String titleField = cell.getStringCellValue(); titleFields.add(titleField); } for (int i = titleRow + 1; i <= rowTotle; i++) { Map<String, Object> rowMap = new HashMap<>(); for (int j = 0; j < titleFields.size(); j++) { try{ //获取行数据 Row row = sheetName.getRow(i); String rowKey = titleFields.get(j); Cell cloCell = row.getCell(j); if(cloCell != null){ String cellType = cloCell.getCellType().toString(); if("STRING".equals(cellType)){ rowMap.put(rowKey, cloCell.getStringCellValue()); }else if(DateUtil.isCellDateFormatted(cloCell)){ Date date = cloCell.getDateCellValue(); DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); rowMap.put(rowKey,dateFormat.format(date)); } else if("NUMERIC".equals(cellType)){ rowMap.put(rowKey, cloCell.getNumericCellValue()); } else if("BOOLEAN".equals(cellType)){ rowMap.put(rowKey,cloCell.getBooleanCellValue()); }else if("FORMULA".equals(cellType)){ XSSFFormulaEvaluator eva = new XSSFFormulaEvaluator(workbook); CellValue cellValue = eva.evaluate(cloCell); rowMap.put(rowKey, cellValue.getStringValue()); } } }catch (Exception exception) { log.info("excel表格读取报错: ", exception); } } if(rowMap.size() > 0){ dataList.add(rowMap); } } } //读取xlsx表格 public static void read2003(List<Map<String, Object>> dataList, Sheet sheetName, Integer titleRow, HSSFWorkbook workbook){ int rowTotle = sheetName.getLastRowNum(); Row title = sheetName.getRow(titleRow); Iterator<Cell> titleIte = title.cellIterator(); List<String> titleFields = new ArrayList<>(); while (titleIte.hasNext()){ Cell cell = titleIte.next(); String titleField = cell.getStringCellValue(); titleFields.add(titleField); } for (int i = titleRow + 1; i <= rowTotle; i++) { Map<String, Object> rowMap = new HashMap<>(); for (int j = 0; j < titleFields.size(); j++) { try{ //获取行数据 Row row = sheetName.getRow(i); String rowKey = titleFields.get(j); Cell cloCell = row.getCell(j); if(cloCell != null){ String cellType = cloCell.getCellType().toString(); if("STRING".equals(cellType)){ rowMap.put(rowKey, cloCell.getStringCellValue()); }else if(DateUtil.isCellDateFormatted(cloCell)){ Date date = cloCell.getDateCellValue(); DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); rowMap.put(rowKey,dateFormat.format(date)); } else if("NUMERIC".equals(cellType)){ rowMap.put(rowKey, cloCell.getNumericCellValue()); } else if("BOOLEAN".equals(cellType)){ rowMap.put(rowKey,cloCell.getBooleanCellValue()); }else if("FORMULA".equals(cellType)){ HSSFFormulaEvaluator eva = new HSSFFormulaEvaluator(workbook); CellValue cellValue = eva.evaluate(cloCell); rowMap.put(rowKey, cellValue.getStringValue()); } } }catch (Exception exception) { log.info("excel表格读取报错: ", exception); } } if(rowMap.size() > 0){ dataList.add(rowMap); } } } /** * 读取excel文件 * @param file 上传文件 * @param huMapList 返回数据列表 * @param sheetName 表格中sheetName */ public static void readExcel(MultipartFile file, List<Map<String, Object>> huMapList, String sheetName, Integer titleRow) { try (InputStream stream = file.getInputStream()) { // 检查扩展名 String fileName = file.getOriginalFilename(); assert fileName != null; String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase(); //通过后缀选择不同的表格处理方法 if ("xls".equals(fileExt)) { HSSFWorkbook workbook = new HSSFWorkbook(stream); //户 Sheet hu = workbook.getSheet(sheetName); if (hu != null) { ReadExcelUtil.read2003(huMapList, hu, titleRow, workbook); } else { throw new BzywException("检查文件中sheet名称是否为:" + sheetName); } } else if ("xlsx".equals(fileExt)) { XSSFWorkbook workbook = new XSSFWorkbook(stream); //户 Sheet hu = workbook.getSheet(sheetName); if (hu != null) { ReadExcelUtil.read2007(huMapList, hu, titleRow, workbook); } else { throw new BzywException("检查文件中sheet名称是否为:" + sheetName); } } else { throw new BzywException("文件类型错误:不被允许的文件格式"); } } catch (IOException e) { e.printStackTrace(); } } }
-
java使用POI导入excel并记录一个读取xlsx报错
小蜗牛爱远行2024-03-14 6:05
相关推荐
_.Switch6 分钟前
Python 自动化运维持续优化与性能调优徐*红6 分钟前
java 线程池尚学教辅学习资料6 分钟前
基于SSM的养老院管理系统+LW示例参考2401_857636397 分钟前
计算机课程管理平台:Spring Boot与工程认证的结合1 9 J9 分钟前
Java 上机实践4(类与对象)Code apprenticeship9 分钟前
Java面试题(2)J不A秃V头A12 分钟前
Python爬虫:获取国家货币编码、货币名称憨子周1 小时前
2M的带宽怎么怎么设置tcp滑动窗口以及连接池霖雨3 小时前
使用Visual Studio Code 快速新建Net项目SRY122404193 小时前
javaSE面试题