java 用 jxl poi 进行excel 解析 *** 最爱那水货
1 /** 2 * 解析excel文件 ,并把数据放入数组中 格式 xlsx xls 3 * @param path 从ftp上下载到本地的文件的路径 4 * @return 数据数组集合 5 */ 6 public List<String[]> readExcelPublic(String path){ 7 List<String[]> list = new ArrayList<String[]>(); 8 log.info("开始解析"+path.substring(path.lastIndexOf("\\")+1)+"文件"); 9 10 try { 11 FileInputStream is = new FileInputStream(path); //文件流 12 Workbook workbook = WorkbookFactory.create(is); //这种方式 Excel 2003/2007/2010 都是可以处理的 13 Sheet sheet = workbook.getSheetAt(0);//得到excel第一页的内容 14 for (int i = 0; i < sheet.getPhysicalNumberOfRows(); i++) { 15 //循环行数 16 Row row = sheet.getRow(i); 17 //获取当前行的列长度 18 int cols_length = row.getPhysicalNumberOfCells(); 19 //设置当前数组长度 5 20 String[] str = new String[cols_length]; 21 for (int j = 0; j < row.getPhysicalNumberOfCells(); j++) { 22 Cell cell = row.getCell(j); 23 str[j] = this.getValue(cell); 24 } 25 list.add(str); 26 } 27 log.info("文件"+path.substring(path.lastIndexOf("\\")+1)+"解析完毕!"); 28 } catch (FileNotFoundException e) { 29 log.error("!!!!!!! 未找到文件!文件为: 【"+path+"】"); 30 e.printStackTrace(); 31 } catch (InvalidFormatException e) { 32 log.error("!!!!!!! 解析文件出错!文件为: 【"+path+"】"); 33 e.printStackTrace(); 34 } catch (IOException e) { 35 log.error("!!!!!!! 解析文件出错!文件为: 【"+path+"】"); 36 e.printStackTrace(); 37 } 38 return list; 39 } 40 41 42 /** 43 * 解析excel 文件<br> 44 * 格式为:xls 45 * @param path 文件的路径 46 * @return List<String[]> 47 */ 48 public List<String[]> xlsReadExcel(String path){ 49 List<String[]> list = new ArrayList<String[]>(); 50 log.info("开始解析"+path.substring(path.lastIndexOf("\\")+1)+"文件"); 51 try { 52 FileInputStream is = new FileInputStream(path); //文件流 53 HSSFWorkbook workbook = new HSSFWorkbook(is); 54 HSSFSheet sheet = workbook.getSheetAt(0);//得到excel第一页的内容 55 for (int i = 0; i < sheet.getLastRowNum(); i++) { 56 //循环行数 57 HSSFRow row = sheet.getRow(i); 58 //获取当前行的列长度 59 int cols_length = row.getLastCellNum(); 60 //设置当前数组长度 5 61 String[] str = new String[cols_length]; 62 for (int j = 0; j < row.getLastCellNum(); j++) { 63 HSSFCell cell = row.getCell(j); 64 str[j] = this.getValue(cell); 65 } 66 list.add(str); 67 log.info("文件"+path.substring(path.lastIndexOf("\\")+1)+"解析完毕!"); 68 } 69 } catch (FileNotFoundException e) { 70 log.error("!!!!!!! 未找到文件!文件为: 【"+path+"】"); 71 e.printStackTrace(); 72 } catch (IOException e) { 73 log.error("!!!!!!! 解析文件出错!文件为: 【"+path+"】"); 74 e.printStackTrace(); 75 } 76 return list; 77 } 78 79 80 81 82 /** 83 * 解析excel 文件<br> 84 * 格式为:xlsx 85 * @param path 文件的路径 86 * @return List<String[]> 87 */ 88 public List<String[]> xlsxAnalysisExcexl(String path){ 89 List<String[]> list = new ArrayList<String[]>(); 90 log.info("开始解析"+path.substring(path.lastIndexOf("\\")+1)+"文件"); 91 try { 92 FileInputStream is = new FileInputStream(path); //文件流 93 XSSFWorkbook workbook = new XSSFWorkbook( is); 94 XSSFSheet sheet = workbook.getSheetAt(0);//得到excel第一页的内容 95 for (int i = 0; i < sheet.getLastRowNum(); i++) { 96 //循环行数 97 XSSFRow row = sheet.getRow(i); 98 //获取当前行的列长度 99 int cols_length = row.getLastCellNum(); 100 //设置当前数组长度 5 101 String[] str = new String[cols_length]; 102 for (int j = 0; j < row.getLastCellNum(); j++) { 103 XSSFCell cell = row.getCell(j); 104 str[j] = this.getValue(cell); 105 } 106 list.add(str); 107 log.info("文件"+path.substring(path.lastIndexOf("\\")+1)+"解析完毕!"); 108 } 109 } catch (FileNotFoundException e) { 110 log.error("!!!!!!! 未找到文件!文件为: 【"+path+"】"); 111 e.printStackTrace(); 112 } catch (IOException e) { 113 log.error("!!!!!!! 解析文件出错!文件为: 【"+path+"】"); 114 e.printStackTrace(); 115 } 116 return list; 117 } 118 119 120 121 /** 122 * JXL 解析excel 【只适用于 xls格式 的文件解析】 <br> 123 * JXL 不支持 xlsx 文件的解析 124 * @param path 文件的路径 125 * @return 126 */ 127 public List<String[]> jxlReadExcel(String path){ 128 List<String[]> list = new ArrayList<String[]>(); 129 try { 130 InputStream is = new FileInputStream(path); 131 jxl.Workbook rwb = jxl.Workbook.getWorkbook(is); 132 jxl.Sheet sheet = rwb.getSheet(0); 133 for (int i = 0; i < sheet.getRows(); i++) { 134 jxl.Cell[] cell = sheet.getRow(i); 135 String[] strs = new String[cell.length]; 136 for (int j = 0; j < cell.length; j++) { 137 strs[j] = cell[j].getContents(); 138 } 139 list.add(strs); 140 } 141 } catch (FileNotFoundException e) { 142 e.printStackTrace(); 143 } catch (BiffException e) { 144 e.printStackTrace(); 145 } catch (IndexOutOfBoundsException e) { 146 e.printStackTrace(); 147 } catch (IOException e) { 148 e.printStackTrace(); 149 } 150 return list; 151 } 152 153 154 155 156 /** 157 * 根据不同的cell格式数据 来转换为string的数据 158 * @param cell 单元格内容 159 * @return 160 */ 161 private String getValue(Cell cell) { 162 int cellType = cell.getCellType(); 163 String cellValue = null; 164 switch(cellType) { 165 case Cell.CELL_TYPE_STRING: //文本 166 cellValue = cell.getStringCellValue(); 167 break; 168 case Cell.CELL_TYPE_NUMERIC: //数字、日期 169 if(DateUtil.isCellDateFormatted(cell)) { 170 cellValue = new SimpleDateFormat("yyyyMMdd").format(cell.getDateCellValue()); //日期型 171 } 172 else { 173 String num = String.valueOf(cell.getNumericCellValue()); //数字 174 if(num.contains("E")){ 175 cellValue = num.substring(0,num.indexOf("E")).replaceAll("\\.", ""); 176 }else if(num.endsWith(".0")){ 177 cellValue = num.split("\\.")[0]; 178 }else{ 179 cellValue = num; 180 } 181 } 182 break; 183 case Cell.CELL_TYPE_BOOLEAN: //布尔型 184 cellValue = String.valueOf(cell.getBooleanCellValue()); 185 break; 186 case Cell.CELL_TYPE_BLANK: //空白 187 cellValue = cell.getStringCellValue(); 188 break; 189 case Cell.CELL_TYPE_ERROR: //错误 190 cellValue = ""; 191 break; 192 case Cell.CELL_TYPE_FORMULA: //公式 193 cellValue = ""; 194 break; 195 default: 196 cellValue = ""; 197 198 } 199 return cellValue; 200 } 201 202 203 /** 204 * 转换类型 <br> 205 * 支持xls 格式的excel文件 206 * @param hssfCell 207 * @return 208 */ 209 @SuppressWarnings("static-access") 210 private String getValue(HSSFCell hssfCell){ 211 if(hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN){ 212 return String.valueOf( hssfCell.getBooleanCellValue()); 213 }else if(hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC){ 214 String num = String.valueOf( hssfCell.getNumericCellValue()); 215 if(num.contains("E")){//科学计数法 去掉. 和E及E后面的 216 return num.substring(0,num.indexOf("E")).replaceAll("\\.", ""); 217 }else if(num.endsWith(".0")){// 自动转成 .0的,去掉.0 218 return num.split("\\.")[0]; 219 }else{ 220 return num; 221 } 222 }else{ 223 return String.valueOf( hssfCell.getStringCellValue()); 224 } 225 } 226 227 228 /** 229 * 转换类型 <br> 230 * 支持 xlsx 格式的excel文件 231 * @param xssfCell 232 * @return 233 */ 234 @SuppressWarnings("static-access") 235 private String getValue(XSSFCell xssfCell){ 236 if(xssfCell.getCellType() == xssfCell.CELL_TYPE_BOOLEAN){ 237 return String.valueOf( xssfCell.getBooleanCellValue()); 238 }else if(xssfCell.getCellType() == xssfCell.CELL_TYPE_NUMERIC){ 239 String num = String.valueOf( xssfCell.getNumericCellValue()); 240 if(num.contains("E")){//科学计数法 去掉. 和E及E后面的 241 return num.substring(0,num.indexOf("E")).replaceAll("\\.", ""); 242 }else if(num.endsWith(".0")){// 自动转成 .0的,去掉.0 243 return num.split("\\.")[0]; 244 }else{ 245 return num; 246 } 247 }else{ 248 return String.valueOf( xssfCell.getStringCellValue()); 249 } 250 } 251
转载于:https://www.cnblogs.com/chinazhou-wang/p/5910056.html
java 用 jxl poi 进行excel 解析 *** 最爱那水货相关推荐
- Java利用Apace POI读取Excel中数据
Java利用Apace POI读取Excel中数据,解析数据 @Testpublic void readExcel() throws IOException{FileSystemView fsv = ...
- java使用jxl包读写excel表格文件,即xls格式文件
全栈工程师开发手册 (作者:栾鹏) java教程全解 java使用jxl包读写excel表格文件,即xls格式文件 本实例演示使用jxl包实现对excel文件的操作,下载 测试代码 public st ...
- poi的excel解析工具类
2019独角兽企业重金招聘Python工程师标准>>> import org.apache.commons.lang.StringUtils; import org.apache.c ...
- Java中用Apache POI生成excel和word文档
概述: 最近在做项目的过程中遇到了excel的数据导出和word的图文表报告的导出功能,最后决定用Apache POI来完成该项功能.本文就项目实现过程中的一些思路与代码与大家共享,同时,也作为自己的 ...
- Java 调用 Apache POI 往 Excel 插入图片
Java 中,调用 Apache 的 POI 操作 Excel,往 Excel 中插入一张图片. //create a new workbookWorkbook wb = new XSSFWorkbo ...
- java 采用apache poi处理excel文件兼容2003及2007
需要引入的jar包 poi-3.13.jar.poi-ooxml-3.13.jar.poi-ooxml-schemas-3.13.jar.xmlbeans-2.6.0.jar . maven工程引入 ...
- Java利用jxl.jar操作Excel文件的方法——把两列相同的数据扫描输出到新的Excel文件中...
为什么80%的码农都做不了架构师?>>> 最近公司在做数据库方面的改造,其中有两个核心库,可以把它们分别命名成A侧库和B侧库,改造的目的是把AB的库整合成一个库,其中表名相同的 ...
- 使用JAVA流操作(POI)将Excel表中数据取出,并直接生成完整SQL语句
使用POI读取excel,并输出为sql语句 一.准备工作 二.编写代码(Transform.java) 三.完整代码 四.POI所有常用方法参考 个人文章地址 一.准备工作 1.1.新建一个普通的M ...
- Java:使用POI导出Excel文件后打开文件提示因为文件格式或文件扩展名无效而无法打开
使用POI导出Excel文件后打开文件提示因为文件格式或文件扩展名无效而无法打开 问题 方案 问题 在SpringBoot项目中,使用POI导出查询结果至Excel文件中,成功导出后打开Excel文件 ...
最新文章
- Vue.js中 computed 和 methods 的区别
- 微信小程序里页面滚动到底部
- 关于web自动化操作的分析和基类的实现
- 配置maven环境变量cmd控制台提示:mvn不是内部或外部命令,也不是可运行的程序或批处理文件...
- Fortinet 荣膺谷歌云年度安全技术合作伙伴奖
- 手机/邮箱等帐号判断
- java根据表名取出字MySQL_mysql取得数据库所有表名和字段注释_MySQL
- php ueditor怎么用,ueditor PHP版本使用方法
- 怎么清理ug10注册表_鼠标的滚轮失灵了怎么办
- 无线摄像头接有线如何改协议_WiFi中继器——让无线传输更简单
- wps下一步快捷键_办公必备|终于整理完了这74个WPS最常用快捷键
- 普中科技单片机AD电压数模转换。STC89C52和XPT2046 芯片
- Swing绝对布局之setBounds
- python版本的flapy bird_python实现简单flappy bird
- HBGGP的工程建立过程
- 遥感影像基于样本的面向对象分类方法
- 给div添加漂亮的边框背景图
- Android应该怎么学
- 什么样的生日邮件是用户今生挚爱?
- Android开发:BaseExpandableListAdapter的使用
热门文章
- Spring Boot @Async 简单实践
- tensorflow越跑越慢_tensorflow sess.run()越来越慢的原因分析及其解决方法
- leetcode - 139. 单词拆分
- Recbole自定义训练集、验证集和测试集推荐
- 二分查找原理非递归与递归实现【转载】
- Multi-thread--Windows和Linux下通用的线程接口
- Ubuntu16.04 sudo apt-get install lib***-dev安装失败,无法锁定文件,sudo apt-get update 更新失败也无法解决
- 安装FFmpeg后,发现没有生成ffplay的解决办法
- oracle oms可以调用吗,oracle oms
- 事件 ID 3001错误的解决方法