/**
* 解析excel文件 ,并把数据放入数组中 格式 xlsx xls
* @param path 从ftp上下载到本地的文件的路径
* @return 数据数组集合
*/
public List<String[]> readExcelPublic(String path){
List<String[]> list = new ArrayList<String[]>();
log.info("开始解析"+path.substring(path.lastIndexOf("\\")+1)+"文件"); try {
FileInputStream is = new FileInputStream(path); //文件流
Workbook workbook = WorkbookFactory.create(is); //这种方式 Excel 2003/2007/2010 都是可以处理的
Sheet sheet = workbook.getSheetAt(0);//得到excel第一页的内容
for (int i = 0; i < sheet.getPhysicalNumberOfRows(); i++) {
//循环行数
Row row = sheet.getRow(i);
//获取当前行的列长度
int cols_length = row.getPhysicalNumberOfCells();
//设置当前数组长度 5
String[] str = new String[cols_length];
for (int j = 0; j < row.getPhysicalNumberOfCells(); j++) {
Cell cell = row.getCell(j);
str[j] = this.getValue(cell);
}
list.add(str);
}
log.info("文件"+path.substring(path.lastIndexOf("\\")+1)+"解析完毕!");
} catch (FileNotFoundException e) {
log.error("!!!!!!! 未找到文件!文件为: 【"+path+"】");
e.printStackTrace();
} catch (InvalidFormatException e) {
log.error("!!!!!!! 解析文件出错!文件为: 【"+path+"】");
e.printStackTrace();
} catch (IOException e) {
log.error("!!!!!!! 解析文件出错!文件为: 【"+path+"】");
e.printStackTrace();
}
return list;
} /**
* 解析excel 文件<br>
* 格式为:xls
* @param path 文件的路径
* @return List<String[]>
*/
public List<String[]> xlsReadExcel(String path){
List<String[]> list = new ArrayList<String[]>();
log.info("开始解析"+path.substring(path.lastIndexOf("\\")+1)+"文件");
try {
FileInputStream is = new FileInputStream(path); //文件流
HSSFWorkbook workbook = new HSSFWorkbook(is);
HSSFSheet sheet = workbook.getSheetAt(0);//得到excel第一页的内容
for (int i = 0; i < sheet.getLastRowNum(); i++) {
//循环行数
HSSFRow row = sheet.getRow(i);
//获取当前行的列长度
int cols_length = row.getLastCellNum();
//设置当前数组长度 5
String[] str = new String[cols_length];
for (int j = 0; j < row.getLastCellNum(); j++) {
HSSFCell cell = row.getCell(j);
str[j] = this.getValue(cell);
}
list.add(str);
log.info("文件"+path.substring(path.lastIndexOf("\\")+1)+"解析完毕!");
}
} catch (FileNotFoundException e) {
log.error("!!!!!!! 未找到文件!文件为: 【"+path+"】");
e.printStackTrace();
} catch (IOException e) {
log.error("!!!!!!! 解析文件出错!文件为: 【"+path+"】");
e.printStackTrace();
}
return list;
} /**
* 解析excel 文件<br>
* 格式为:xlsx
* @param path 文件的路径
* @return List<String[]>
*/
public List<String[]> xlsxAnalysisExcexl(String path){
List<String[]> list = new ArrayList<String[]>();
log.info("开始解析"+path.substring(path.lastIndexOf("\\")+1)+"文件");
try {
FileInputStream is = new FileInputStream(path); //文件流
XSSFWorkbook workbook = new XSSFWorkbook( is);
XSSFSheet sheet = workbook.getSheetAt(0);//得到excel第一页的内容
for (int i = 0; i < sheet.getLastRowNum(); i++) {
//循环行数
XSSFRow row = sheet.getRow(i);
//获取当前行的列长度
int cols_length = row.getLastCellNum();
//设置当前数组长度 5
String[] str = new String[cols_length];
for (int j = 0; j < row.getLastCellNum(); j++) {
XSSFCell cell = row.getCell(j);
str[j] = this.getValue(cell);
}
list.add(str);
log.info("文件"+path.substring(path.lastIndexOf("\\")+1)+"解析完毕!");
}
} catch (FileNotFoundException e) {
log.error("!!!!!!! 未找到文件!文件为: 【"+path+"】");
e.printStackTrace();
} catch (IOException e) {
log.error("!!!!!!! 解析文件出错!文件为: 【"+path+"】");
e.printStackTrace();
}
return list;
} /**
* JXL 解析excel 【只适用于 xls格式 的文件解析】 <br>
* JXL 不支持 xlsx 文件的解析
* @param path 文件的路径
* @return
*/
public List<String[]> jxlReadExcel(String path){
List<String[]> list = new ArrayList<String[]>();
try {
InputStream is = new FileInputStream(path);
jxl.Workbook rwb = jxl.Workbook.getWorkbook(is);
jxl.Sheet sheet = rwb.getSheet(0);
for (int i = 0; i < sheet.getRows(); i++) {
jxl.Cell[] cell = sheet.getRow(i);
String[] strs = new String[cell.length];
for (int j = 0; j < cell.length; j++) {
strs[j] = cell[j].getContents();
}
list.add(strs);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (BiffException e) {
e.printStackTrace();
} catch (IndexOutOfBoundsException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return list;
} /**
* 根据不同的cell格式数据 来转换为string的数据
* @param cell 单元格内容
* @return
*/
private String getValue(Cell cell) {
int cellType = cell.getCellType();
String cellValue = null;
switch(cellType) {
case Cell.CELL_TYPE_STRING: //文本
cellValue = cell.getStringCellValue();
break;
case Cell.CELL_TYPE_NUMERIC: //数字、日期
if(DateUtil.isCellDateFormatted(cell)) {
cellValue = new SimpleDateFormat("yyyyMMdd").format(cell.getDateCellValue()); //日期型
}
else {
String num = String.valueOf(cell.getNumericCellValue()); //数字
if(num.contains("E")){
cellValue = num.substring(0,num.indexOf("E")).replaceAll("\\.", "");
}else if(num.endsWith(".0")){
cellValue = num.split("\\.")[0];
}else{
cellValue = num;
}
}
break;
case Cell.CELL_TYPE_BOOLEAN: //布尔型
cellValue = String.valueOf(cell.getBooleanCellValue());
break;
case Cell.CELL_TYPE_BLANK: //空白
cellValue = cell.getStringCellValue();
break;
case Cell.CELL_TYPE_ERROR: //错误
cellValue = "";
break;
case Cell.CELL_TYPE_FORMULA: //公式
cellValue = "";
break;
default:
cellValue = ""; }
return cellValue;
} /**
* 转换类型 <br>
* 支持xls 格式的excel文件
* @param hssfCell
* @return
*/
@SuppressWarnings("static-access")
private String getValue(HSSFCell hssfCell){
if(hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN){
return String.valueOf( hssfCell.getBooleanCellValue());
}else if(hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC){
String num = String.valueOf( hssfCell.getNumericCellValue());
if(num.contains("E")){//科学计数法 去掉. 和E及E后面的
return num.substring(0,num.indexOf("E")).replaceAll("\\.", "");
}else if(num.endsWith(".0")){// 自动转成 .0的,去掉.0
return num.split("\\.")[0];
}else{
return num;
}
}else{
return String.valueOf( hssfCell.getStringCellValue());
}
} /**
* 转换类型 <br>
* 支持 xlsx 格式的excel文件
* @param xssfCell
* @return
*/
@SuppressWarnings("static-access")
private String getValue(XSSFCell xssfCell){
if(xssfCell.getCellType() == xssfCell.CELL_TYPE_BOOLEAN){
return String.valueOf( xssfCell.getBooleanCellValue());
}else if(xssfCell.getCellType() == xssfCell.CELL_TYPE_NUMERIC){
String num = String.valueOf( xssfCell.getNumericCellValue());
if(num.contains("E")){//科学计数法 去掉. 和E及E后面的
return num.substring(0,num.indexOf("E")).replaceAll("\\.", "");
}else if(num.endsWith(".0")){// 自动转成 .0的,去掉.0
return num.split("\\.")[0];
}else{
return num;
}
}else{
return String.valueOf( xssfCell.getStringCellValue());
}
}

java 用 jxl poi 进行excel 解析 *** 最爱那水货的更多相关文章

  1. java 使用jxl poi 操作excel

    java操作excel  创建.修改 xls 文件 JAVA操作Excel文件 Java生成和操作Excel文件 java导出Excel通用方法 Java 实现导出excel表 POI Java PO ...

  2. java使用jxl,poi解析excel文件

    public interface JavaExcel { /** * 使用jxl写excel文件 */ public void writeJxlExcel(); /** * 使用jxl读excel文件 ...

  3. java中使用poi导出excel表格数据并且可以手动修改导出路径

    在我们开发项目中,很多时候会提出这样的需求:将前端的某某数据以excel表格导出,今天就给大家写一个简单的模板. 这里我们选择使用poi导出excel: 第一步:导入需要的jar包到 lib 文件夹下

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

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

  5. Java使用Apache POI进行Excel导入和导出

    Manve依赖 <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --> <dependency> ...

  6. 自己写的java用jxl导出到excel工具

    package com; import java.io.BufferedOutputStream; import java.io.File; import java.io.IOException; i ...

  7. JAVA利用JXL导出/生成 EXCEL

    /** * 导出导出采暖市场部收入.成本.利润明细表 * @author JIA-G-Y */ public String exporExcel(String str) { String str=Se ...

  8. java的jxl技术导入Excel

    项目结构: http://www.cnblogs.com/hongten/gallery/image/112177.html 在项目中我们看到Reference Libraries中的jxl.jar包 ...

  9. java使用Apache POI操作excel文件

    官方介绍 HSSF is the POI Project's pure Java implementation of the Excel '97(-2007) file format. XSSF is ...

随机推荐

  1. lua表排序

    对于lua的table排序问题,一般的按照value值来排序,使用table.sort( needSortTable , func)即可(可以根据自己的需要重写func,否则会根据默认来:默认的情形之 ...

  2. iOS-ARC

    1. 本文的主要内容: ARC的本质 ARC的开启与关闭 ARC的修饰符 ARC与Block ARC与Toll-Free Bridging ARC的本质 ARC是编译器(时)特性,而不是运行时特性,更 ...

  3. html5视频全频播放

    html5视频全频播放 旋转90度 对video进行缩放 修正position 效果还凑合 代码 $(media).rotate({ // angle: 90, duration: 100, anim ...

  4. wangEditor——轻量级web富文本框

    提示:最新版wangEditor请参见  http://www.wangeditor.com/  和   https://github.com/wangfupeng1988/wangEditor 交流 ...

  5. 最简单的SVN环境搭建过程

    本文简单描述最简单的SVN环境搭建过程 搭建环境:windows (个人验证了windows2003,windows xp) 使用软件:Setup-Subversion-1.6.17  //Serve ...

  6. [c++] Associative Containers

    关联容器 和 顺序容器 的本质差别在于: 关联容器通过键(key)存储和读取元素,而顺序容器则通过元素在容器中的位置顺序存储和访问元素. Reference: http://www.cnblogs.c ...

  7. 轻松自动化---selenium-webdriver(python) (九)

    本节重点: 上传文件 文件上传操作也比较常见功能之一,上传功能没有用到新有方法或函数,关键是思路. 上传过程一般要打开一个本地窗口,从窗口选择本地文件添加.所以,一般会卡在如何操作本地窗口添加上传文件 ...

  8. [C] C语言中的布尔值

    C不具备显示的布尔类型,所以使用整数来代替,规则是:零是假,任何非零值皆为真. 反过来说,如果逻辑表达式为真其值一定为真,若逻辑表达式为假其值一定为零.

  9. Android TextView 添加下划线的几种方式

    总结起来大概有5种做法:  1. 将要处理的文字写到一个资源文件,如string.xml(使用html用法格式化)   2. 当文字中出现URL.E-mail.电话号码等的时候,可以将TextView ...

  10. Swift的期待

    去年底苹果开源 Swift 之后,Google.Facebook和Uber三个互联网巨头就曾在伦敦召开会议讨论Swift在各自开发战略中的地位.近日业界有消息传出,谷歌有意考虑将Swift作为Andr ...