/**
* 解析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. [Java面试十一]数据库总结.

    问题及描述: --1.学生表 Student(SID,Sname,Sage,Ssex) --SID 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 --2.课程表 Course ...

  2. vue for 绑定事件

    vue for 绑定事件 <div id="pro_list" v-for="item in pro_list"> <div class=&q ...

  3. SoapUI测试WS接口实战

    引文: 本文讨论以下问题: 视频播放功能如何进行压力测试? 进行webservices接口测试时,用LR和soapui哪个工具更好? 1 测试需求 前几天接到一项压力测试的任务:视频播放功能的并发压力 ...

  4. Chrome开发者工具之JavaScript内存分析

    阅读目录 对象大小(Object sizes) 对象的占用总内存树 支配对象(Dominators) V8介绍 Chrome 任务管理器 通过DevTools Timeline来定位内存问题 内存回收 ...

  5. 了解HTML表单之input元素的23种type类型

    目录 传统类型 text password file radio checkbox hidden button image reset submit 新增类型 color tel email url ...

  6. ZZUOJ1196: 单调数

    /* 注意的事项:是输出小于 10^n的正整数的个数哦!开始的时候总比样例输出多一个数, 纠结了好久,原来是 0加了进去了! dpI[n][m]表示的是第n位添加数字m(0....9)的构成单调递增数 ...

  7. Unity3D默认的快捷键

    shift +方向键             向“向方向键前进” Windows系统Unity3D中的快捷键 组合键 键 功能 File 文件 Ctrl   N New Scene 新建场景 Ctrl ...

  8. Java多线程系列--“JUC原子类”01之 框架

    根据修改的数据类型,可以将JUC包中的原子操作类可以分为4类. 1. 基本类型: AtomicInteger, AtomicLong, AtomicBoolean ;2. 数组类型: AtomicIn ...

  9. Debugging WebLogic Server Applications Using Eclipse and the WebLogic-Plugin

    http://www.oracle.com/technetwork/cn/tutorials/eclipse-plugin-093411.html

  10. weback学习笔记

    weback可以把各种资源,例如JS(含JSX).coffee.样式(含less/sass).图片等都作为模块来使用和处理.同时支持amd cmd CommonJS语法.同时可以和gulp一块使用. ...