解析Excel获取单元格数据
今天自己写了一遍解析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获取单元格数据相关推荐
- java 解析excel获取单元格内容封装方法(兼容2003和2007)
支持xls2003及xlsx2007导入excel //导入excel接口 @RequestMapping(params = "importDecMainCode", method ...
- JAVA:Excel合并单元格数据读取
问题 使用poi解析excel后,若为合并单元格,仅第一行有数据,后面的合并单元格没有数据: 解决办法 判断cell是否为合并单元格,之后分类处理 //判断是否为合并行if(isMergedRegio ...
- easyexcel读取excel合并单元格数据
普通的excel列表,easyexcel读取是没有什么问题的.但是,如果有合并单元格,那么它读取的时候,能获取数据,但是数据是不完整的.如下所示的单元格数据: 我们通过简单的异步读取,最后查看数据内容 ...
- 使用poi实现excel追加单元格/数据
现有一个excel数据不多不少有将近两万条数据,有一列数据被筛选过了,背景填充色有红色有绿色,要求如果是红色这一行新增一个单元格填充1,绿色填充0,简单写了一个main方法实现. 2007版 pack ...
- 提取 Excel 指定单元格数据
1. 思路 提取指定单元格数据,分以下两种情况: 1. 单元格名称固定不变.此时可以用xlscell函数直接按单元格名称读取,如果整个数据区是个数据表格,也可以用T函数读取序表后,再按记录行号和列名读 ...
- html提取excel指定单元格数据,如何利用Excel函数公式快速提取出单元格中指定的数据...
在我们的日常工作中,Excel单元格中数据的提取是我们日常操作中常用且实用的功能,学会它你就可以攻克很多的难题,数据的批量处理将不再是问题,例如再Excel表单元格中有这么一串数据[520我爱你13y ...
- html提取excel指定单元格数据,怎样从很多的表格中提取指定单元格数据
本帖最后由 11119999hrs 于 2018-7-26 19:24 编辑 For i = 1 To k '遍历 ...
- C# DataGridView控件选中某行和获取单元格数据
DataGridView的几个基本操作: 1.获得某个(指定的)单元格的值: dataGridView1.Row[i].Cells[j].Value; 2.获得选中的总行数: dataGridView ...
- python批量合并excel固定单元格数据
目的:相同格式的excel表,需要合并数据,手动输入太费事费力 缺点:读取大批量数据运行较慢(>10 min),写入多个表格更新行列较麻烦 import openpyxl from win32c ...
最新文章
- 2022-2028年中国果壳活性炭行业市场发展调研及竞争战略分析报告
- ASP.NET AJAX入门系列(9):在母版页中使用UpdatePanel
- python 利用matplotlib中imshow()函数绘图
- 全球100款大数据工具汇总(前50款)
- Linux学习 - sed使用
- Qt5.7+Opencv2.4.9人脸识别(四)模型训练
- 肯普纳级数收敛性的证明
- 微信小程序实现即时通信聊天功能 php swoole
- 二维码固定资产管理系统能解决企业的哪些痛点?
- 设置谷歌浏览器黑色主题
- PS制作火焰文字特效
- 1433端口被运营商封锁的解决方法
- matlab分数怎么表示,分子为1的分数怎么输入matlab
- t420i升级固态硬盘提升_旧电脑升级!使用固态硬盘必做的5件事,让win10操作流畅如win7...
- Word/Excel文档操作API哪家强?一张表带你了解Aspose和Spire系列全功能对比
- BI与ClickHouse:探索式BI的OLAP技术演进之路
- 荷兰,here I am
- Tomcat NIO(9)-IO线程-Overall流程和关键类
- Linux面试题汇总-3
- 台式计算机正常工作时的电流是多少,下列数据符合实际的是( )A.一盏家用台灯正常工作时通过的电流是...