POI解析Execl工具类

2024-09-01 13:58
文章标签 工具 解析 poi execl

本文主要是介绍POI解析Execl工具类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

代码:

public class PoixUtil {

    private static Logger log = (Logger) LogManager.getLogger(PoixUtil.class.getName());

    

/*** 从excel文件中读取里面的内容(以headers为基准) .xls* @param file excel文件* @param headers 标题code的数组* @param beginRow 起始行,从1开始* @param endRow 结束行 从1开始,如果为空,就默认为最后一行* @param beginCol 起始列,从1开始* @param sheetName 要读取哪个sheet,如果为空,那么就取第一个* @return 读取的结果集* @throws Exception 异常*/
public static List<LinkedHashMap<String,Object>> readExcel(MultipartFile file,String[] headers, Integer beginRow, Integer endRow, Integer beginCol,String sheetName) throws BusinessException {List<LinkedHashMap<String,Object>> rsList = new ArrayList<LinkedHashMap<String,Object>>();InputStream is = null;XSSFWorkbook workBook = null;try{is =file.getInputStream();workBook = new XSSFWorkbook(is);XSSFSheet sheet = null;if(!StrUtil.isEmpty(sheetName)){sheet = workBook.getSheet(sheetName);if(sheet == null){throw new Exception("该Excel未找到名字为【"+sheetName+"】的sheet!");}}else{sheet = workBook.getSheetAt(0);}if(beginRow == null){beginRow = 0;}if(beginCol == null){beginCol = 0;}XSSFRow row = null;XSSFCell cell = null;LinkedHashMap<String,Object> rowMap = null;Integer nowCol = null;int cellType = 0;Object value = null;if(endRow == null){endRow = sheet.getLastRowNum();}for(int i=beginRow; i<= endRow; i++){row = sheet.getRow(i);if(row == null){continue;}rowMap = new LinkedHashMap<String,Object>();nowCol = beginCol;for(int j=0;j<headers.length;j++){cell = row.getCell(nowCol);if(cell == null){nowCol++;continue;}cellType = cell.getCellType();//单元格类型if(XSSFCell.CELL_TYPE_BLANK == cellType){value =null;}else if(XSSFCell.CELL_TYPE_BOOLEAN == cellType){value = cell.getBooleanCellValue();}else if(XSSFCell.CELL_TYPE_ERROR == cellType){value = cell.getErrorCellValue();}else if(XSSFCell.CELL_TYPE_FORMULA == cellType){try {value = String.valueOf(cell.getNumericCellValue());} catch (IllegalStateException e) {value = String.valueOf(cell.getRichStringCellValue());}}else if(XSSFCell.CELL_TYPE_NUMERIC == cellType){if (HSSFDateUtil.isCellDateFormatted(cell)) {// 处理日期格式、时间格式SimpleDateFormat sdf = null;if (cell.getCellStyle().getDataFormat() == HSSFDataFormat.getBuiltinFormat("h:mm")) {sdf = new SimpleDateFormat("HH:mm");} else {// 日期sdf = new SimpleDateFormat("yyyy-MM-dd");}Date date = cell.getDateCellValue();value = sdf.format(date);} else if (cell.getCellStyle().getDataFormat() == 58) {// 处理自定义日期格式:m月d日(通过判断单元格的格式id解决,id的值是58)SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");double valuef = cell.getNumericCellValue();Date date =HSSFDateUtil.getJavaDate(valuef);value = sdf.format(date);} else {value= NumberToTextConverter.toText(cell.getNumericCellValue());}}else if(XSSFCell.CELL_TYPE_STRING == cellType){value =StrUtil.trim(cell.getStringCellValue());}else{throw new Exception("Excel的单元格(第"+row.getRowNum()+"行,第"+cell.getColumnIndex()+"列)不能识别类型!");}rowMap.put(headers[j], value);nowCol++;}rsList.add(rowMap);}}catch(Exception e){throw new BusinessException(e.getMessage());}finally{if(workBook != null){try{workBook.close();}catch(Exception e){log.error(e);}}if(is != null){try{is.close();}catch(Exception e){log.error(e);}}}return rsList;
}

}

 

这篇关于POI解析Execl工具类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1127133

相关文章

基于Python打造一个全能文本处理工具

《基于Python打造一个全能文本处理工具》:本文主要介绍一个基于Python+Tkinter开发的全功能本地化文本处理工具,它不仅具备基础的格式转换功能,更集成了中文特色处理等实用功能,有需要的... 目录1. 概述:当文本处理遇上python图形界面2. 功能全景图:六大核心模块解析3.运行效果4. 相

springboot项目中常用的工具类和api详解

《springboot项目中常用的工具类和api详解》在SpringBoot项目中,开发者通常会依赖一些工具类和API来简化开发、提高效率,以下是一些常用的工具类及其典型应用场景,涵盖Spring原生... 目录1. Spring Framework 自带工具类(1) StringUtils(2) Coll

MySQL中FIND_IN_SET函数与INSTR函数用法解析

《MySQL中FIND_IN_SET函数与INSTR函数用法解析》:本文主要介绍MySQL中FIND_IN_SET函数与INSTR函数用法解析,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一... 目录一、功能定义与语法1、FIND_IN_SET函数2、INSTR函数二、本质区别对比三、实际场景案例分

基于Python实现高效PPT转图片工具

《基于Python实现高效PPT转图片工具》在日常工作中,PPT是我们常用的演示工具,但有时候我们需要将PPT的内容提取为图片格式以便于展示或保存,所以本文将用Python实现PPT转PNG工具,希望... 目录1. 概述2. 功能使用2.1 安装依赖2.2 使用步骤2.3 代码实现2.4 GUI界面3.效

基于Python和MoviePy实现照片管理和视频合成工具

《基于Python和MoviePy实现照片管理和视频合成工具》在这篇博客中,我们将详细剖析一个基于Python的图形界面应用程序,该程序使用wxPython构建用户界面,并结合MoviePy、Pill... 目录引言项目概述代码结构分析1. 导入和依赖2. 主类:PhotoManager初始化方法:__in

使用Python自建轻量级的HTTP调试工具

《使用Python自建轻量级的HTTP调试工具》这篇文章主要为大家详细介绍了如何使用Python自建一个轻量级的HTTP调试工具,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录一、为什么需要自建工具二、核心功能设计三、技术选型四、分步实现五、进阶优化技巧六、使用示例七、性能对比八、扩展方向建

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

关于WebSocket协议状态码解析

《关于WebSocket协议状态码解析》:本文主要介绍关于WebSocket协议状态码的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录WebSocket协议状态码解析1. 引言2. WebSocket协议状态码概述3. WebSocket协议状态码详解3

CSS Padding 和 Margin 区别全解析

《CSSPadding和Margin区别全解析》CSS中的padding和margin是两个非常基础且重要的属性,它们用于控制元素周围的空白区域,本文将详细介绍padding和... 目录css Padding 和 Margin 全解析1. Padding: 内边距2. Margin: 外边距3. Padd

Oracle数据库常见字段类型大全以及超详细解析

《Oracle数据库常见字段类型大全以及超详细解析》在Oracle数据库中查询特定表的字段个数通常需要使用SQL语句来完成,:本文主要介绍Oracle数据库常见字段类型大全以及超详细解析,文中通过... 目录前言一、字符类型(Character)1、CHAR:定长字符数据类型2、VARCHAR2:变长字符数