今天自己写了一遍解析Excel的方法,虽然也是根据网上一些例子来写的,但是一边写一边在网上查找这些类、方法的含义及左右,感觉还是有所收获的。记录一下以后方便使用。
 private static final String  xls = "xls";private static final String  xlsx = "xlsx";/*** 读取excel文件内容* @param file MultipartFile* @return List<SQLEntity>* @throws Exception*/public static List<SQLEntity> excel(MultipartFile file) throws Exception {Workbook workbook = getWorkBook(file);//获取getWorkBook实例List<SQLEntity> list = new ArrayList<>();//返回的Listif(workbook == null) return list;int sheetNum = workbook.getNumberOfSheets();//sheet的页数for(int num = 0; num < sheetNum; num++){Sheet sheet = workbook.getSheetAt(num);//获取当前下标的Sheetif(sheet == null) continue;int firstRowNum = sheet.getFirstRowNum();//获得当前sheet的开头行int lastRowNum = sheet.getLastRowNum();//获得当前sheet的结束行for(int rowNum = firstRowNum+1; rowNum <= lastRowNum; rowNum++){//遍历除第一行之外的行Row row = sheet.getRow(rowNum);//获得当前行if(row == null) continue;int firstCellNum = row.getFirstCellNum();//获得当前row的开始列int lastCellNum = row.getPhysicalNumberOfCells();//获取有记录的列//创建实体类SQLEntity sqlEntity = new SQLEntity();for(int cellNum = firstCellNum; cellNum < lastCellNum; cellNum++){Cell cell = row.getCell(cellNum);//String cellValue = cell.toString();String cellValue = getCellValue(cell);//根据不同下标将cell的value放入实体中switch (cellNum){case 0:sqlEntity.setName(cellValue);break;case 1:sqlEntity.setDesc(cellValue);break;}}list.add(sqlEntity);}}workbook.close();return list;}/*** 生产WorkBook对象* @param file MultipartFile* @return Workbook* @throws IOException*/public static Workbook getWorkBook(MultipartFile file) throws IOException {Workbook workbook = null;InputStream fis = file.getInputStream();;//创建输入流//这里用BufferedInputStream再包装一层,可解决:mark/reset not supported问题BufferedInputStream bis = new BufferedInputStream(fis);String[] splitName = file.getOriginalFilename().split("\\.");//分割名称,获取后缀String suffix = splitName[splitName.length-1];//检查是否为excel文件if(splitName==null && !(xls.equals(suffix) || xlsx.equals(suffix))) return workbook;switch(suffix){case xls://2003及以下workbook = new HSSFWorkbook(bis);break;case xlsx://2007及以上workbook = new XSSFWorkbook(bis);break;}return workbook;}/*** 将不同cellType都转为String类型* @param cell* @return String*/public static String getCellValue(Cell cell){String cellValue = "";if(cell == null) return cellValue;//将数字转成string来读取,如果不注释会出现1.5转成1.0的现象//if(cell.getCellType() == Cell.CELL_TYPE_NUMERIC) cell.setCellValue(Cell.CELL_TYPE_STRING);switch(cell.getCellType()) {case Cell.CELL_TYPE_NUMERIC://数字cellValue = String.valueOf(cell.getNumericCellValue());break;case Cell.CELL_TYPE_STRING://字符串cellValue = String.valueOf(cell.getStringCellValue());break;case Cell.CELL_TYPE_BOOLEAN://布尔cellValue = String.valueOf(cell.getBooleanCellValue());break;case Cell.CELL_TYPE_FORMULA://公式cellValue = String.valueOf(cell.getCellFormula());break;case Cell.CELL_TYPE_ERROR://错误cellValue = "错误";break;case Cell.CELL_TYPE_BLANK://空break;default:cellValue = "默认";break;}return cellValue;}

解析Excel获取单元格数据相关推荐

  1. java 解析excel获取单元格内容封装方法(兼容2003和2007)

    支持xls2003及xlsx2007导入excel //导入excel接口 @RequestMapping(params = "importDecMainCode", method ...

  2. JAVA:Excel合并单元格数据读取

    问题 使用poi解析excel后,若为合并单元格,仅第一行有数据,后面的合并单元格没有数据: 解决办法 判断cell是否为合并单元格,之后分类处理 //判断是否为合并行if(isMergedRegio ...

  3. easyexcel读取excel合并单元格数据

    普通的excel列表,easyexcel读取是没有什么问题的.但是,如果有合并单元格,那么它读取的时候,能获取数据,但是数据是不完整的.如下所示的单元格数据: 我们通过简单的异步读取,最后查看数据内容 ...

  4. 使用poi实现excel追加单元格/数据

    现有一个excel数据不多不少有将近两万条数据,有一列数据被筛选过了,背景填充色有红色有绿色,要求如果是红色这一行新增一个单元格填充1,绿色填充0,简单写了一个main方法实现. 2007版 pack ...

  5. 提取 Excel 指定单元格数据

    1. 思路 提取指定单元格数据,分以下两种情况: 1. 单元格名称固定不变.此时可以用xlscell函数直接按单元格名称读取,如果整个数据区是个数据表格,也可以用T函数读取序表后,再按记录行号和列名读 ...

  6. html提取excel指定单元格数据,如何利用Excel函数公式快速提取出单元格中指定的数据...

    在我们的日常工作中,Excel单元格中数据的提取是我们日常操作中常用且实用的功能,学会它你就可以攻克很多的难题,数据的批量处理将不再是问题,例如再Excel表单元格中有这么一串数据[520我爱你13y ...

  7. html提取excel指定单元格数据,怎样从很多的表格中提取指定单元格数据

    本帖最后由 11119999hrs 于 2018-7-26 19:24 编辑 For i = 1 To k                                            '遍历 ...

  8. C# DataGridView控件选中某行和获取单元格数据

    DataGridView的几个基本操作: 1.获得某个(指定的)单元格的值: dataGridView1.Row[i].Cells[j].Value; 2.获得选中的总行数: dataGridView ...

  9. python批量合并excel固定单元格数据

    目的:相同格式的excel表,需要合并数据,手动输入太费事费力 缺点:读取大批量数据运行较慢(>10 min),写入多个表格更新行列较麻烦 import openpyxl from win32c ...

最新文章

  1. 2022-2028年中国果壳活性炭行业市场发展调研及竞争战略分析报告
  2. ASP.NET AJAX入门系列(9):在母版页中使用UpdatePanel
  3. python 利用matplotlib中imshow()函数绘图
  4. 全球100款大数据工具汇总(前50款)
  5. Linux学习 - sed使用
  6. Qt5.7+Opencv2.4.9人脸识别(四)模型训练
  7. 肯普纳级数收敛性的证明
  8. 微信小程序实现即时通信聊天功能 php swoole
  9. 二维码固定资产管理系统能解决企业的哪些痛点?
  10. 设置谷歌浏览器黑色主题
  11. PS制作火焰文字特效
  12. 1433端口被运营商封锁的解决方法
  13. matlab分数怎么表示,分子为1的分数怎么输入matlab
  14. t420i升级固态硬盘提升_旧电脑升级!使用固态硬盘必做的5件事,让win10操作流畅如win7...
  15. Word/Excel文档操作API哪家强?一张表带你了解Aspose和Spire系列全功能对比
  16. BI与ClickHouse:探索式BI的OLAP技术演进之路
  17. 荷兰,here I am
  18. Tomcat NIO(9)-IO线程-Overall流程和关键类
  19. Linux面试题汇总-3
  20. 台式计算机正常工作时的电流是多少,下列数据符合实际的是( )A.一盏家用台灯正常工作时通过的电流是...

热门文章

  1. python-regex-thread-localhost
  2. JAVA基础 之 String
  3. 2016..8.25 切题总结
  4. Arduino简单实现两自由度Scara机器人
  5. 苹果笔记本的end键_苹果电脑快捷键使用 Mac快捷键大全详细介绍
  6. IAssemblyDoc Interface 学习笔记
  7. TP5——workerman在线客服
  8. java的博_小博老师解析Java核心技术 ——I/O流
  9. 网口压线顺序_网线压线顺序是怎样的?
  10. excel如何快速自动让空白单元格填充上一行内容