java 读excle poi3.8_POI 3.8读取2003与2007格式EXCEL(xls、xlsx)
废话少说直接上代码,记得是poi3.8版本啊。方法入口唯一,自动判断格式,使用接口引用,自动选择执行方法。
方法入口:
public static ArrayList explanExcelToList(String fileName) {
ArrayList list = new ArrayList();
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 explanExcelToList(String fileName) {
ArrayList list = new ArrayList();
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 explanExcelToList(Workbook wb) {
ArrayList resList = new ArrayList();
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 explantSheet(Sheet sheet) {
ArrayList list = new ArrayList();
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);
}
}
java 读excle poi3.8_POI 3.8读取2003与2007格式EXCEL(xls、xlsx)相关推荐
- 【第01篇】利用POI框架的SAX方式之读取大数据2007版Excel(xlsx)【第1版】
1.开发环境:jdk7,poi3.13 如图: 红色标注的jar包需要自己去下,这个是利用SAX机理处理xml的接口,而POI实现了它(我记得是这样,仅供参考) 2. 背景需求: 前台上传一个xlsx ...
- java读文件几种方式_JAVA读取文件的几种方式
{ File file1 = new File("/Users/tao/Downloads/酒店id.txt"); // 创建File类对象 FileInputStream fis ...
- java读取与写入excel(.xls .xlsx)
maven依赖: 首先在maven中添加: <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --><depend ...
- POI读取Excel:*.xls,*.xlsx
Excel分xls和xlsx,通过POI读取出来,拿个xlsx文件做个示例 读取区别: *.xls:通过org.apache.poi.hssf.usermodel.HSSFWorkbook *.xls ...
- java正则表达式 文件后缀名_正则表达式 判断文件名后缀是否为 csv xls xlsx
展开全部 在input中想要获取32313133353236313431303231363533e58685e5aeb931333365646262上传的文件名,那么onclick事件是不行的,因为一 ...
- Java导出2003、2007版Excel
创建用于添加表头的实体类 /*** excel导出标题显示值* @author Terisadeng**/ public class KeyValue {private String key;priv ...
- Java读取UTF-8格式txt文件第一行出现乱码及解决;Java读带有BOM的UTF-8文件乱码原因及解决方法(转载)...
原文地址:http://blog.csdn.net/jackpk/article/details/5702964/ Java读取UTF-8的txt文件第一行出现乱码"?"及解决 t ...
- 怎么在java中引用图片_如何使用Java(读/写)读取复制和粘贴图片?
在Java语言编程中,如何使用Java(读/写)读取复制和粘贴图片? 注意:需要访问网址:http://book2s.com/java/jar/o/opencv/download-opencv-3.2 ...
- java 读excel 流_Java 读取excel 文件流代码实例
这篇文章主要介绍了Java 读取excel 文件流代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 代码如下public static voi ...
最新文章
- I00039 亲密数(Amicable numbers)
- Xcode11 上传苹果卡在Authenticating with the iTunes store 或者transpoter上传卡在正在验证 APP - 正在通过App Store进行认证
- css布局中的百分比布局
- 【题解】Luogu P5279 [ZJOI2019]麻将
- 通过钉钉群聊机器人推送zabbix告警
- nas php.ini,php.ini 配置文件常用详解
- MFC 窗体样式修改
- 【每日算法】基数排序算法
- 抛物面天线的工作原理是什么?
- C	简单瞎搞题(牛客练习赛22)(bitset优化dp)
- cannot resolve symbol xxxx问题
- iptables指南
- 计算机网络安全基础知识复习
- dejavu-python的音频指纹识别库
- JavaScript swiper
- 论如何使用Python进行微信公众号的开发
- 商业模式是利益相关者的交易结构
- html 整体边距,html内容左右边距怎么设置
- 5G毫米波Vs毫米波通信模块
- local class incompatible: stream classdesc serialVersionUID = 4696092613551164015, local