/**
* 解析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. atitit。ocr框架类库大全 attilax总结

    atitit.ocr框架类库大全 attilax总结 Tesseract Asprise JavaOCR 闲来无事,发现百度有一个OCR文字识别接口,感觉挺有意思的,拿来研究一下. 百度服务简介:文字 ...

  2. js 优化

    一.for循环的优化 <!doctype html> <html lang="en"> <head> <meta charset=&quo ...

  3. ftp下载目录下所有文件及文件夹内(递归)

    ftp下载目录下所有文件及文件夹内(递归)   /// <summary> /// ftp文件上传.下载操作类 /// </summary> public class FTPH ...

  4. DOM_06之定时器、事件、cookie

    1.定时器:①任务函数:函数结尾判断临界值:②启动定时器:a.周期性:timer=setInterval(任务函数,interval):b.一次性:timer=setTimeout(任务函数,wait ...

  5. java8--stream

    *:first-child { margin-top: 0 !important; } .markdown-body>*:last-child { margin-bottom: 0 !impor ...

  6. JTMz换路径导致MySQL服务不能启动的问题

    问题: JTMz解压到我的机器上,运行一次后,把服务停止了,然后移到了另外一个路径,JTMz中自带的MySQL服务启动不起来了. 解决: 在注册表中修改 HKEY_LOCAL_MACHINE\SYST ...

  7. ViewPager做图片浏览器,加载大量图片OOM的问题修正

    /** * @author CHQ * @version 1.0 * @date 创建时间: 2016/7/26 17:18 * @parameter * @return * 图片查看器 * //可以 ...

  8. angularjs学习总结 详细教程(转载)

    1 前言 前端技术的发展是如此之快,各种优秀技术.优秀框架的出现简直让人目不暇接,紧跟时代潮流,学习掌握新知识自然是不敢怠慢. AngularJS是google在维护,其在国外已经十分火热,可是国内的 ...

  9. Android之自定义ListView(一)

    PS:自定义View是Android中高手进阶的路线.因此我也打算一步一步的学习.看了鸿洋和郭霖这两位大牛的博客,决定一步一步的学习,循序渐进. 学习内容: 1.自定义View实现ListView的I ...

  10. Windows Azure HandBook (3) 浅谈Azure安全性

    <Windows Azure Platform 系列文章目录> 2015年3月5日-6日,参加了上海的Azure University活动.作为桌长与微软合作伙伴交流了Azure相关的技术 ...