/**
* 解析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. paip.解决access出现 -2147467259 无效的参数量

    paip.解决access出现 -2147467259   无效的参数量 作者Attilax  艾龙,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http: ...

  2. C#学习系列-this的使用

    如有错误,欢迎指正. 1.代表当前类,在当前类中可使用this访问当前类成员变量和方法(需要注意的是 静态方法中不能使用this),也可用于参数传递,传递当前对象的引用. 下面贴代码: class P ...

  3. 每天一个linux命令(61):vi命令 /企业常用的linux命令清单

    vi/vim 的使用 基本上 vi/vim 共分为三种模式,分别是一般模式.编辑模式与指令列命令模式. 这三种模式的作用分别是: 一般模式:以 vi 打开一个档案就直接进入一般模式了(这是默认的模式) ...

  4. MySQL5.7.13源码编译安装指南

    系统 CenterOs 6.5 1.安装依赖包(cmake make gcc等,其实好多都有了,不需要更新,为了防止世界被破坏,就装下) yum install gcc gcc-c++ -yyum i ...

  5. Liferay7 BPM门户开发之42: Liferay核心JSP定制扩展

    Liferay最大的好处是不仅接口强大,利于扩展,就连JSP定制扩展都提供了3种方式. 修改核心jsp代码,有3种修改方式:1.暴力修改直接修改(位于portal-web/docroot/html), ...

  6. Ubuntu-安装-theano+caffe-超详细教程

    一.说明 本文是继<Ubuntu-安装-cuda7.0-单显卡-超详细教程> 之后的续篇.theano和caffe是深度学习库,对运算能力需求很大,最好使用cuda进行加速.所以,请先阅读 ...

  7. Zookeeper-Zookeeper leader选举

    在上一篇文章中我们大致浏览了zookeeper的启动过程,并且提到在Zookeeper的启动过程中leader选举是非常重要而且最复杂的一个环节.那么什么是leader选举呢?zookeeper为什么 ...

  8. (转)sql的join图解

    假设我们有两张表,Table A是左边的表,Table B是右边的表. 其各有四条记录,其中有两条记录是相同的,如下所示: 1 id name       id  name 2 -- ----     ...

  9. Nutch源码阅读进程3---fetch

    走了一遍Inject和Generate,基本了解了nutch在执行爬取前的一些前期预热工作,包括url的过滤.规则化.分值计算以及其与mapreduce的联系紧密性等,自我感觉nutch的整个流程是很 ...

  10. Simptip – 使用 Sass 制作的 CSS Tooltip 效果

    Simptip 是一个简单基于 Sass 的 CSS 工具提示效果.帮助你在网站中加入在不同的方向(上.左.右.下)的工具提示,也可以设置不同的颜色如成功.信息.警告和危险.最后还有其他特性如软边.半 ...