java使用poi解析Excel文件流
2021/6/9 12:23:59
本文主要是介绍java使用poi解析Excel文件流,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
java使用poi解析Excel文件流
@PostMapping("/importExcel") public void importExcel(MultipartFile file) { LinkedHashMap<String, String> stringStringLinkedHashMap; try { stringStringLinkedHashMap = EasyPoiUtil.excelToJson(file); String info = stringStringLinkedHashMap.get("sheet"); JSONArray objects = JSON.parseArray(info); } catch (IOException e) { e.printStackTrace(); } }
public static LinkedHashMap<String, String> excelToJson(MultipartFile file) throws IOException { // 返回的map LinkedHashMap<String, String> excelMap = new LinkedHashMap<>(); // Excel列的样式,主要是为了解决Excel数字科学计数的问题 CellStyle cellStyle; // 根据Excel构成的对象 Workbook wb; // 如果是2007及以上版本,则使用想要的Workbook以及CellStyle if (file.getOriginalFilename().endsWith("xlsx")) { wb = new XSSFWorkbook(file.getInputStream()); XSSFDataFormat dataFormat = (XSSFDataFormat) wb.createDataFormat(); cellStyle = wb.createCellStyle(); // 设置Excel列的样式为文本 cellStyle.setDataFormat(dataFormat.getFormat("@")); } else { POIFSFileSystem fs = new POIFSFileSystem(file.getInputStream()); wb = new HSSFWorkbook(fs); HSSFDataFormat dataFormat = (HSSFDataFormat) wb.createDataFormat(); cellStyle = wb.createCellStyle(); // 设置Excel列的样式为文本 cellStyle.setDataFormat(dataFormat.getFormat("@")); } // sheet表个数 //int sheetsCounts = wb.getNumberOfSheets(); int sheetsCounts=1; // 遍历每一个sheet for (int i = 0; i < sheetsCounts; i++) { Sheet sheet = wb.getSheetAt(i); // 一个sheet表对于一个List List list = new LinkedList(); // 将第一行的列值作为正个json的key String[] cellNames; // 取第一行列的值作为key Row fisrtRow = sheet.getRow(0); // 如果第一行就为空,则是空sheet表,该表跳过 if (null == fisrtRow) { continue; } // 得到第一行有多少列 int curCellNum = fisrtRow.getLastCellNum(); // 根据第一行的列数来生成列头数组 cellNames = new String[curCellNum]; // 单独处理第一行,取出第一行的每个列值放在数组中,就得到了整张表的JSON的key for (int m = 0; m < curCellNum; m++) { Cell cell = fisrtRow.getCell(m); // 设置该列的样式是字符串 cell.setCellStyle(cellStyle); cell.setCellType(Cell.CELL_TYPE_STRING); // 取得该列的字符串值 cellNames[m] = cell.getStringCellValue(); } // 从第二行起遍历每一行 int rowNum = sheet.getLastRowNum(); System.out.println("总共有 " + rowNum + " 行"); for (int j = 1; j <= rowNum; j++) { // 一行数据对于一个Map LinkedHashMap rowMap = new LinkedHashMap(); // 取得某一行 Row row = sheet.getRow(j); int cellNum = row.getLastCellNum(); // 遍历每一列 for (int k = 0; k < cellNum; k++) { Cell cell = row.getCell(k); cell.setCellStyle(cellStyle); cell.setCellType(Cell.CELL_TYPE_STRING); // 保存该单元格的数据到该行中 rowMap.put(cellNames[k], cell.getStringCellValue()); } // 保存该行的数据到该表的List中 list.add(rowMap); } // 将该sheet表的表名为key,List转为json后的字符串为Value进行存储 excelMap.put("sheet", JSON.toJSONString(list, false)); } return excelMap; }
这篇关于java使用poi解析Excel文件流的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-28AI给的和自己写的Python代码,都无法改变输入框的内容,替换也不行
- 2024-09-27Sentinel配置限流资料:新手入门教程
- 2024-09-27Sentinel配置限流资料详解
- 2024-09-27Sentinel限流资料:新手入门教程
- 2024-09-26Sentinel限流资料入门详解
- 2024-09-26Springboot框架资料:初学者入门教程
- 2024-09-26Springboot框架资料详解:新手入门教程
- 2024-09-26Springboot企业级开发资料:新手入门指南
- 2024-09-26SpringBoot企业级开发资料新手指南
- 2024-09-26Springboot微服务资料入门教程