POI 3.8读取2003与2007格式EXCEL(xls、xlsx)
废话少说直接上代码,记得是poi3.8版本啊。方法入口唯一,自动判断格式,使用接口引用,自动选择执行方法。
方法入口:
public static ArrayList<String[]> explanExcelToList(String fileName) {
ArrayList<String[]> list = new ArrayList<String[]>();
Workbook wb = null;
try {
wb = get2003Workbook(new FileInputStream(fileName));
if (wb == null) {
wb = get2007Workbook(new FileInputStream(fileName));
if (wb == null) {
throw new RuntimeException("无法识别的格式,Unexpected Excel type (" + fileName + ")");
}
}
list = explanExcelToList(wb);
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
package com.order.cc.outboundcall.impExlDate.svc; import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date; import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.formula.eval.ErrorEval;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.DataFormatter;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.RichTextString;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.struts.upload.FormFile; public class ExcelHelper {
private static Integer SHEET_PAGE_NUM = 0;// 读取sheet页第一页 public static ArrayList<String[]> explanExcelToList(String fileName) {
ArrayList<String[]> list = new ArrayList<String[]>();
Workbook wb = null;
try {
wb = get2003Workbook(new FileInputStream(fileName));
if (wb == null) {
wb = get2007Workbook(new FileInputStream(fileName));
if (wb == null) {
throw new RuntimeException("无法识别的格式,Unexpected Excel type (" + fileName + ")");
}
}
list = explanExcelToList(wb); } catch (IOException e) {
e.printStackTrace();
}
return list;
} public static ArrayList<String[]> explanExcelToList(Workbook wb) {
ArrayList<String[]> resList = new ArrayList<String[]>();
if (wb == null) {
return resList;
}
try {
wb.setMissingCellPolicy(Row.RETURN_BLANK_AS_NULL);// 空白设置为null
// 读取第一章表格内容
Sheet sheet = wb.getSheetAt(SHEET_PAGE_NUM);
if (sheet == null) {
return resList;
}
// 循环输出表格中的内容
resList = explantSheet(sheet);
} catch (Exception e) {
e.printStackTrace();
}
return resList;
} /**
*
* 功能说明 使用接口解析Sheet,支持HSSFSheet 与XSSFSheet格式
*
* @创建人 yxh
* @时间 2016-4-26
* @参数说明 @param list
* @参数说明 @param sheet
* @参数返回说明 void
*/
public static ArrayList<String[]> explantSheet(Sheet sheet) {
ArrayList<String[]> list = new ArrayList<String[]>();
if (sheet == null) {
return list;
}
int rowNum = sheet.getRow(0) != null ? sheet.getRow(0).getPhysicalNumberOfCells() : 0;// 通过表头定义数组的位数,确定每行固定大小
if (rowNum == 0) {
rowNum = sheet.getRow(1) != null ? sheet.getRow(1).getPhysicalNumberOfCells() : 0;// 防止不写表头
}
for (int i = 0; i < sheet.getPhysicalNumberOfRows(); i++) {// 循环行
Row row = sheet.getRow(i);
if (row == null) {
continue;
}
String[] contentArr = new String[rowNum];
for (int j = 0; j < rowNum; j++) {// 循环列
Cell cell = row.getCell(j);
String text = "";
if (cell != null) {
text = formatCell(cell);
}
contentArr[j] = text;
}
list.add(contentArr);
}
return list;
} /**
*
* 功能说明 格式化表格内容
*
* @创建人 yxh
* @时间 2016-4-26
* @参数说明 @param cell
* @参数说明 @return
* @参数返回说明 String
*/
public static String formatCell(Cell cell) {
DataFormatter _formatter = new DataFormatter();
switch (cell.getCellType()) {
case Cell.CELL_TYPE_STRING: // 2016年4月27日11:19:20 在excel中视为字符串形式
return cell.getRichStringCellValue().getString();
case Cell.CELL_TYPE_NUMERIC:// 数值型
if (DateUtil.isCellDateFormatted(cell)) {// 日期 poi
return dateToString(cell.getDateCellValue());
} else {
return _formatter.formatCellValue(cell);
}
case Cell.CELL_TYPE_BOOLEAN:
return cell.getBooleanCellValue() == true ? "true" : "false";// boolean
// 转成String
case Cell.CELL_TYPE_ERROR:
return ErrorEval.getText(cell.getErrorCellValue());// 返回错误码
case Cell.CELL_TYPE_FORMULA:// 公式
switch (cell.getCachedFormulaResultType()) {
case Cell.CELL_TYPE_STRING:
RichTextString str = cell.getRichStringCellValue();
if (str != null && str.length() > 0) {
return str.toString();
}
case Cell.CELL_TYPE_NUMERIC:
CellStyle style = cell.getCellStyle();
if (style == null) {
return cell.getNumericCellValue() + "";// double转成String
} else {
return _formatter.formatRawCellContents(cell.getNumericCellValue(), style.getDataFormat(), style.getDataFormatString());
}
case Cell.CELL_TYPE_BOOLEAN:
return cell.getBooleanCellValue() ? "true" : "false";// boolean
// 转成String
case Cell.CELL_TYPE_ERROR:
return ErrorEval.getText(cell.getErrorCellValue()); }
default:
throw new RuntimeException("Unexpected cell type (" + cell.getCellType() + ")");
}
} public static String dateToString(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.format(date);
} public static String dateToString(String date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.format(date);
} public static void closeFile(FormFile file) {
if (file != null) {
try {
file.destroy();
} catch (Exception e2) {
e2.printStackTrace();
}
}
} public static Workbook get2003Workbook(InputStream is) {
Workbook wb = null;
try {
wb = new HSSFWorkbook(is);
} catch (Exception e) {
return wb;
}
return wb;
} public static Workbook get2007Workbook(InputStream is) {
Workbook wb = null;
try {
wb = new XSSFWorkbook(is);
} catch (Exception e) {
return wb;
}
return wb;
} public static boolean isExcel2003(InputStream is) {
try {
new HSSFWorkbook(is);
} catch (Exception e) {
return false;
}
return true;
} public static boolean isExcel2007(InputStream is) {
try {
new XSSFWorkbook(is);
} catch (Exception e) {
return false;
}
return true;
} public static void main(String[] args) {
// FormFile file=null;
// explanExcelToList(file);
}
}
POI 3.8读取2003与2007格式EXCEL(xls、xlsx)的更多相关文章
- JAVA用POI读取和创建2003和2007版本Excel
1.添加maven依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-o ...
- JAVA用POI读取和创建2003和2007版本Excel完美示例
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...
- C#中npoi操作Excel[版本2.0.1读写2003、2007格式]
下载npoi2.0.1dll文件:http://download.csdn.net/detail/pukuimin1226/5851747 public static void test1() ...
- PHPExcel 导出2003和2007的excel文档实例
require_once 'common/excel/PHPExcel.php'; require_once 'common/excel/phpExcel/Writer/Excel2007.php'; ...
- python读取excel数据为json格式(兼容xls\xlsx)
做自动化时需要从excel读取数据: 本文实现将excel文件数据读取为json格式,方便自动化调用 读取xls文件 使用xlrd读取xls文件代码: import xlrd def read_xls ...
- java使用poi.3.10读取excel 2007以上版本(xlsx格式)
1.在使用过程中,一直报错 throw new ClassNotFoundException(name);原因:没有导入xmlbeans-2.6.0.jar包,建议在使用poi时,将所有包都导入进工程 ...
- NPOI 2.1.1 系列(1) 使用NPOI读取 Excel文档 ;NpoiExcelHelper 导入导出 2003格式 2007格式的 Excel; Npoi 导出 xlsx 格式
下载地址 http://npoi.codeplex.com/releases 下面放一个 NPOIHelper 助手类吧,也不是我写的- NpoiExcelHelper 可以生成xlsx格式publi ...
- java 使用POI读写Excel文件(兼容2003、2007)
package com.jadyer.demo; import java.io.File; import java.io.FileOutputStream; import java.io.IOExce ...
- 转帖 java使用poi.3.10读取excel 2010
package poi; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; ...
随机推荐
- Brackets 前端编辑器试用
Brackets编辑器介绍 "一个现代的,开源的,了解网页设计的编辑器"这是官方的宣传语.也就是说它适用于网页开发,包含了许多亮点功能:实时预览(Live Preview).内联编 ...
- Android开发10:传感器器及地图相关应用
前言 啦啦啦~各位小伙伴们好~经过这一学期的Android知识的学习,我们学到了很多和Android开发相关的知识,这一学期的学习也要告一段落了. 一起进入我们今天的相关内容~这次我们将一起学习使用 ...
- 快速排序OC、Swift版源码
前言: 你要问我学学算法在工作当中有什么用,说实话,当达不到那个地步的时候,可能我们不能直接的感觉到它的用处!你就抱着这样一个心态,当一些APP中涉及到算法的时候我不想给其他人画界面!公司的项目也是暂 ...
- 用OC和Swift一起说说二叉树
前言: 一:在计算机科学中,二叉树是每个节点最多有两个子树的树结构.通常子树被称作"左子树"(left subtree)和"右子树"(right subt ...
- gulp快速入门&初体验
前言 一句话先 gulp 是一个可以简单和自动化"管理"前端文件的构建工具 先说我以前的主要工作,我主要是做游戏服务端的,用c++/python,所以我对东西的概念理解难免要套到自 ...
- Linux usb子系统(一) _写一个usb鼠标驱动
USB总线是一种典型的热插拔的总线标准,由于其优异的性能几乎成为了当下大小设备中的标配. USB的驱动可以分为3类:SoC的USB控制器的驱动,主机端USB设备的驱动,设备上的USB Gadget驱动 ...
- Struts2学习笔记⑦
今天我宛若一个智障- Struts2学的差不多了,今天开始做数据库CURD操作的案例,发现模型驱动一直报NullPointerException异常-.我的妈,我查了半天觉得没啥问题,把关注点放在了g ...
- android sdk 深入理解adb
adb 服务器-客户端程序包括3部分 1.客户端(client) 在开发机器上运行,可通过adb命令行呼叫客户端,ADT插件和DDMS同样需要adb客户端 2.服务端(server) 在开发机器上 ...
- Android: DrawerLayout 侧滑菜单栏
DrawerLayout是SupportLibrary包中实现的侧滑菜单效果的控件. 分为主内容区域和侧边菜单区域 drawerLayout本身就支持:侧边菜单根据手势展开与隐藏, 开发者只需要实现: ...
- git 关键词扩展
用习惯了svn 的 关键词扩展.自然在git上也会寻找. 不知道啥是svn的关键词扩展? 简单列举下: 对于subversion来说,一些版本信息是不需要手动添加的,subversion提供了关键字替 ...