public class ReadExcleutil {private static final Logger log = Logger.getLogger(String.valueOf(ReadExcleutil.class));/*** 解析上传的excel, 默认只解析第一张Sheet** @param file     excel* @param startRow 开始行(若为 0 ,则从第一行)*  @param endRow 结束行 (可自定义,,若为 0 ,则自动检索最后行数)*  @param startCell 开始列(可自定义,若为 0 ,则自动检索首列)*  @param endCell 结束行列(可自定义,若为 0 ,则自动检索最后列)* @return List<String [ ]>* @throws IOException*/public static List<JSONObject> getExcelData(MultipartFile file, int startRow,int endRow,int startCell,int endCell) throws IOException, InvalidFormatException {int resultSize = 0;List<JSONObject> resultData = new ArrayList<>();if (!checkFile(file)) {log.info("上传的excel文件格式有问题");return resultData;}//获得Workbook工作薄对象InputStream ins = file.getInputStream();//创建工作簿,不区分xls,xlsxWorkbook workbook = WorkbookFactory.create(ins);if (workbook != null) {//获取第一张sheet工作表Sheet sheet = workbook.getSheetAt(0);if (sheet == null) {return resultData;}// 重新初始化List结果大小resultSize = sheet.getLastRowNum() + 1;//获得当前sheet的开始行int firstRowNum = sheet.getFirstRowNum();//获得当前sheet的结束行int lastRowNum = sheet.getLastRowNum();//若输入的结束行数不为0,则根据输入的结束行数停止if(endRow>0){lastRowNum = endRow;}//循环除了startRow的所有行,如果要循环除第一行以外的就firstRowNum+1for (int rowNum = firstRowNum + startRow; rowNum <= lastRowNum; rowNum++) {//获得当前行Row row = sheet.getRow(rowNum);if (rowIsEmpty(row)) {break;}//获得当前行的开始列int firstCellNum = row.getFirstCellNum();//若输入的结束列不为0,则根据输入的开始行数if(startCell>0){firstCellNum = startCell;}//获得当前行的列数int lastCellNum = row.getLastCellNum();if(endCell>0){lastCellNum = endCell;}
//                String[] cells = new String[lastCellNum];JSONObject js = new JSONObject();//循环当前行for (int cellNum = firstCellNum; cellNum < lastCellNum; cellNum++) {Cell cell = row.getCell(cellNum);
//                    cells[cellNum] = getCellValue(cell);
//                    System.out.println(cell.toString());js.put(String.valueOf(cellNum),getCellValue(cell));}resultData.add(js);}workbook.close();}return resultData;}/*** 检查文件格式** @param file* @throws IOException*/public static boolean checkFile(MultipartFile file) throws IOException {if (null == file) {log.info("文件不存在!");return false;}//获得文件名String fileName = file.getOriginalFilename();//判断文件是否是excel文件if (!fileName.endsWith("xls") && !fileName.endsWith("xlsx")) {log.info(fileName + "不是excel文件");return false;}return true;}public static String getCellValue(Cell cell) {String cellValue = "";if (cell == null) {return cellValue;}switch (cell.getCellTypeEnum()) {case NUMERIC://数字cellValue = stringDateProcess(cell);break;case STRING://字符串cellValue = String.valueOf(cell.getStringCellValue());break;case BOOLEAN://BooleancellValue = String.valueOf(cell.getBooleanCellValue());break;case FORMULA://公式cellValue = String.valueOf(cell.getCellFormula());break;case BLANK://空值cellValue = "";break;case ERROR://故障cellValue = "非法字符";break;default:cellValue = "未知类型";break;}return cellValue;}public static String stringDateProcess(Cell cell) {String result = new String();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 hh:mm:ss");}Date date = cell.getDateCellValue();result = sdf.format(date);} else if (cell.getCellStyle().getDataFormat() == 58) {// 处理自定义日期格式:m月d日(通过判断单元格的格式id解决,id的值是58)SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");double value = cell.getNumericCellValue();Date date = DateUtil.getJavaDate(value);result = sdf.format(date);} else {double value = cell.getNumericCellValue();CellStyle style = cell.getCellStyle();DecimalFormat format = new DecimalFormat();String temp = style.getDataFormatString();// 单元格设置成常规if (temp.equals("General")) {format.applyPattern("0");}result = format.format(value);}return result;}/*** @return * @param null* @Author* @Description //TODO 判断excel的row是否全为空* @Date 2019/12/2 19:30* @Param*/public static boolean rowIsEmpty(Row row) {if (null == row) {return true;}for (int c = row.getFirstCellNum(); c < row.getLastCellNum(); c++) {Cell cell = row.getCell(c);if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK) {return false;}}return true;}}

java-读取Excel文件,自定义读取固定行、列(不区分xls、xlsx)相关推荐

  1. python读取excel部分值存入另一个excel-python3读取excel文件只提取某些行某些列的值方法...

    今天有一位同学给了我一个excel文件,要求读取某些行,某些列,然后我试着做了一个demo,这里分享出来,希望能帮到大家: 首先安装xlrd: pip3 install xlrd 然后上代码: imp ...

  2. python怎么读取excel某一行某一列-python3读取excel文件只提取某些行某些列的值方法...

    今天有一位同学给了我一个excel文件,要求读取某些行,某些列,然后我试着做了一个demo,这里分享出来,希望能帮到大家: 首先安装xlrd: pip3 install xlrd 然后上代码: imp ...

  3. python读取excel某一行内容-python3读取excel文件只提取某些行某些列的值方法

    今天有一位同学给了我一个excel文件,要求读取某些行,某些列,然后我试着做了一个demo,这里分享出来,希望能帮到大家: 首先安装xlrd: pip3 install xlrd 然后上代码: imp ...

  4. python按行读取excel文件_python3读取excel文件只提取某些行某些列的值方法

    今天有一位同学给了我一个excel文件,要求读取某些行,某些列,然后我试着做了一个demo,这里分享出来,希望能帮到大家: 首先安装xlrd: pip3 install xlrd 然后上代码: imp ...

  5. 使用POI 读取 Excel 文件,读取手机号码 变成 1.3471022771E10

    使用POI 读取 Excel 文件,读取手机号码 变成 1.3471022771E10 [问题点数:40分,结帖人xieyongqiu] 不显示删除回复             显示所有回复     ...

  6. java代码读取excel文件_Java 读取excel 文件流代码实例

    这篇文章主要介绍了Java 读取excel 文件流代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 代码如下 public static vo ...

  7. javaScript读取excel文件中某几行的数据

    一.介绍 这份代码借鉴了YouTube上的这个视频:https://www.youtube.com/watch?v=OK60UdWyUdE代码,讲解得很棒,让我一个不太懂javasript的小白明白了 ...

  8. java中excel文件内容读取

    如果使用的maven项目,导入excel文件内容的时候需要引入以下依赖 <dependency>     <groupId>org.apache.poi</groupId ...

  9. python读取excel文件,把指定行表红

    最近公司有个新的需求:上传一个excel文件,需要对文件进行检测,把错误的记录标红并且记录错误原因! 1.首先上传文件此时没有对文件内容进行检查. 2.保存,此时对文件内容进行检查,用pandas库读 ...

  10. Python读取Excel文件时缺少第一行的解决办法

    python在读取Excel文件时默认会把第一行当做列名,所以导致会缺少一行.解决办法如下: 加入header=None

最新文章

  1. h3c 3600 acl 配置 滤源IP是网关的ARP报文的ACL规则
  2. [react] 什么是React的实例?函数式组件有没有实例?
  3. Hbase导入、导出数据到本地文件
  4. android 动态改变文字,android – 如何动态设置文本到TextView?
  5. 转一些SIFT代码链接
  6. Qt面试题(一)Qt信号槽第五个参数
  7. 爬虫库之BeautifulSoup学习(三)
  8. SDN第一次上机作业
  9. PCWorld:流量日趋集中 大公司影响整个互联网
  10. 数据库基本操作和常用命令
  11. Google的Java常用类库 Guava资料
  12. java ssm Vue高校奖学金管理系统毕业设计项目介绍
  13. Drive-by Compromise 术语名词概念
  14. 总结了Mybatis,原来知识点也没多少嘛
  15. 2023最新抖音取图小程序源码分享,带会员功能对接支付部署教程
  16. 企立方-拼多多采集注意的点有哪些
  17. 【专题】详解Python中的反射机制
  18. 编写C#代码时,一个字符串太长如何换行
  19. 速学堂java教程第八章作业答案
  20. 保姆级教程——如何访问内网NAS

热门文章

  1. mysql orderby asc_MySQL 数据排序 order by
  2. Python爬虫入门-fiddler抓取手机新闻评论
  3. 技嘉服务器准系统epyc,技嘉为AMD霄龙处理器推出ATX主板 针对AMD EPYC
  4. mac字体渲染精细处理
  5. ucweb7.0 5800
  6. 小瓦怕扫地机器人_小瓦扫地机器人青春版app下载-小瓦扫地机器人米家app下载v5.6.81 安卓版-西西软件下载...
  7. Arturia Sound Explorers Collection Belledonne现已上市
  8. iOS 开源图形库 Core Plot 使用教程
  9. Ubuntu20.04突然丢失网络时恢复的办法
  10. 翻译:《Pro CSS and HTML Design Patterns》简介、总览和目录