/**
* 解析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. 我所了解的chrome

    Chrome的隐身模式 先来说说隐身模式的启用方法吧 1.键盘快捷:Ctrl + Shift + N. 2.在Windows7下的任务栏处,右击“Chrome”图标,会出一个下拉菜单,点击“新建隐身窗 ...

  2. [Java面试三]JavaWeb基础知识总结.

    1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l Internet上供外界访问的Web资源分为: • 静 ...

  3. 学习ASP.NET MVC(三)——我的第一个ASP.NET MVC 视图

    今天我将对前一篇文章中的示例进行修改,前一篇文章中并没有用到视图,这次将用到视图.对于前一个示例中的HelloWorldController类进行修改,使用视图模板文件生成HTML响应给浏览器. 一. ...

  4. KnockoutJS 3.X API 第四章(13) template绑定

    目的 template绑定(模板绑定)使用渲染模板的结果填充关联的DOM元素. 模板是一种简单方便的方式来构建复杂的UI结构 . 下面介绍两种使用模板绑定的方法: 本地模板是支持foreach,if, ...

  5. 创建oracle数据库job服务:PlSqlDev操作job

    PlSqlDev操作job 创建job 1.选择job文件夹,右键     2.点击新建     3.对应填写完成,可以点击“查看SQL”查看sql语句,确定无误后,点击“应用”即创建完成 4.此时, ...

  6. 移动端 几个css3属性的练习

    转行做前端,上班有一个星期了,什么都不懂,今天学习了几个新的css3属性,记录下来. 注:所有的测试均是在chrome上手机模式测试,与真实的手机环境可能有误差 1:-webkit-tap-heigh ...

  7. 《Qt Quick 4小时入门》学习笔记

    http://edu.csdn.net/course/detail/1042/14804?auto_start=1   Qt Quick 4小时入门 第五章:Qt Quick里的信号与槽   QML中 ...

  8. iOS设备的越狱方法

    最近公司的事情很忙,在开发一个类似于微信的App,经常加班,所以也没有时间去更新微信公众账号的内容了.iOSJailbreak, 申请这个账号大概有一个多月了吧,发布的内容不多,更多是针对开发者的内容 ...

  9. HTML的16个全局属性

    前面的话 在HTML中,属性能表达相当丰富的语义,而且属性也会额外提供很多实用的功能,HTML共支持16个常见的全局属性. HTML原有属性 accesskey 作用:浏览器用来创建激活或聚焦元素的快 ...

  10. 01-Vue.js入门系列

    1.1. Vue简介 Vue是一个前端的双向绑定类的框架,发音[读音 /vjuː/, 类似于 view].新的Vue版本参考了React的部分设计,当然也有自己独特的地方,比如Vue的单文件组件开发方 ...