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 解析 *** 最爱那水货相关推荐

  1. Java利用Apace POI读取Excel中数据

    Java利用Apace POI读取Excel中数据,解析数据 @Testpublic void readExcel() throws IOException{FileSystemView fsv = ...

  2. java使用jxl包读写excel表格文件,即xls格式文件

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java使用jxl包读写excel表格文件,即xls格式文件 本实例演示使用jxl包实现对excel文件的操作,下载 测试代码 public st ...

  3. poi的excel解析工具类

    2019独角兽企业重金招聘Python工程师标准>>> import org.apache.commons.lang.StringUtils; import org.apache.c ...

  4. Java中用Apache POI生成excel和word文档

    概述: 最近在做项目的过程中遇到了excel的数据导出和word的图文表报告的导出功能,最后决定用Apache POI来完成该项功能.本文就项目实现过程中的一些思路与代码与大家共享,同时,也作为自己的 ...

  5. Java 调用 Apache POI 往 Excel 插入图片

    Java 中,调用 Apache 的 POI 操作 Excel,往 Excel 中插入一张图片. //create a new workbookWorkbook wb = new XSSFWorkbo ...

  6. 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工程引入 ...

  7. Java利用jxl.jar操作Excel文件的方法——把两列相同的数据扫描输出到新的Excel文件中...

    为什么80%的码农都做不了架构师?>>>    最近公司在做数据库方面的改造,其中有两个核心库,可以把它们分别命名成A侧库和B侧库,改造的目的是把AB的库整合成一个库,其中表名相同的 ...

  8. 使用JAVA流操作(POI)将Excel表中数据取出,并直接生成完整SQL语句

    使用POI读取excel,并输出为sql语句 一.准备工作 二.编写代码(Transform.java) 三.完整代码 四.POI所有常用方法参考 个人文章地址 一.准备工作 1.1.新建一个普通的M ...

  9. Java:使用POI导出Excel文件后打开文件提示因为文件格式或文件扩展名无效而无法打开

    使用POI导出Excel文件后打开文件提示因为文件格式或文件扩展名无效而无法打开 问题 方案 问题 在SpringBoot项目中,使用POI导出查询结果至Excel文件中,成功导出后打开Excel文件 ...

最新文章

  1. Vue.js中 computed 和 methods 的区别
  2. 微信小程序里页面滚动到底部
  3. 关于web自动化操作的分析和基类的实现
  4. 配置maven环境变量cmd控制台提示:mvn不是内部或外部命令,也不是可运行的程序或批处理文件...
  5. Fortinet 荣膺谷歌云年度安全技术合作伙伴奖
  6. 手机/邮箱等帐号判断
  7. java根据表名取出字MySQL_mysql取得数据库所有表名和字段注释_MySQL
  8. php ueditor怎么用,ueditor PHP版本使用方法
  9. 怎么清理ug10注册表_鼠标的滚轮失灵了怎么办
  10. 无线摄像头接有线如何改协议_WiFi中继器——让无线传输更简单
  11. wps下一步快捷键_办公必备|终于整理完了这74个WPS最常用快捷键
  12. 普中科技单片机AD电压数模转换。STC89C52和XPT2046 芯片
  13. Swing绝对布局之setBounds
  14. python版本的flapy bird_python实现简单flappy bird
  15. HBGGP的工程建立过程
  16. 遥感影像基于样本的面向对象分类方法
  17. 给div添加漂亮的边框背景图
  18. Android应该怎么学
  19. 什么样的生日邮件是用户今生挚爱?
  20. Android开发:BaseExpandableListAdapter的使用

热门文章

  1. Spring Boot @Async 简单实践
  2. tensorflow越跑越慢_tensorflow sess.run()越来越慢的原因分析及其解决方法
  3. leetcode - 139. 单词拆分
  4. Recbole自定义训练集、验证集和测试集推荐
  5. 二分查找原理非递归与递归实现【转载】
  6. Multi-thread--Windows和Linux下通用的线程接口
  7. Ubuntu16.04 sudo apt-get install lib***-dev安装失败,无法锁定文件,sudo apt-get update 更新失败也无法解决
  8. 安装FFmpeg后,发现没有生成ffplay的解决办法
  9. oracle oms可以调用吗,oracle oms
  10. 事件 ID 3001错误的解决方法