废话少说直接上代码,记得是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)相关推荐

  1. 【第01篇】利用POI框架的SAX方式之读取大数据2007版Excel(xlsx)【第1版】

    1.开发环境:jdk7,poi3.13 如图: 红色标注的jar包需要自己去下,这个是利用SAX机理处理xml的接口,而POI实现了它(我记得是这样,仅供参考) 2. 背景需求: 前台上传一个xlsx ...

  2. java读文件几种方式_JAVA读取文件的几种方式

    { File file1 = new File("/Users/tao/Downloads/酒店id.txt"); // 创建File类对象 FileInputStream fis ...

  3. java读取与写入excel(.xls .xlsx)

    maven依赖: 首先在maven中添加: <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --><depend ...

  4. POI读取Excel:*.xls,*.xlsx

    Excel分xls和xlsx,通过POI读取出来,拿个xlsx文件做个示例 读取区别: *.xls:通过org.apache.poi.hssf.usermodel.HSSFWorkbook *.xls ...

  5. java正则表达式 文件后缀名_正则表达式 判断文件名后缀是否为 csv xls xlsx

    展开全部 在input中想要获取32313133353236313431303231363533e58685e5aeb931333365646262上传的文件名,那么onclick事件是不行的,因为一 ...

  6. Java导出2003、2007版Excel

    创建用于添加表头的实体类 /*** excel导出标题显示值* @author Terisadeng**/ public class KeyValue {private String key;priv ...

  7. Java读取UTF-8格式txt文件第一行出现乱码及解决;Java读带有BOM的UTF-8文件乱码原因及解决方法(转载)...

    原文地址:http://blog.csdn.net/jackpk/article/details/5702964/ Java读取UTF-8的txt文件第一行出现乱码"?"及解决 t ...

  8. 怎么在java中引用图片_如何使用Java(读/写)读取复制和粘贴图片?

    在Java语言编程中,如何使用Java(读/写)读取复制和粘贴图片? 注意:需要访问网址:http://book2s.com/java/jar/o/opencv/download-opencv-3.2 ...

  9. java 读excel 流_Java 读取excel 文件流代码实例

    这篇文章主要介绍了Java 读取excel 文件流代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 代码如下public static voi ...

最新文章

  1. I00039 亲密数(Amicable numbers)
  2. Xcode11 上传苹果卡在Authenticating with the iTunes store 或者transpoter上传卡在正在验证 APP - 正在通过App Store进行认证
  3. css布局中的百分比布局
  4. 【题解】Luogu P5279 [ZJOI2019]麻将
  5. 通过钉钉群聊机器人推送zabbix告警
  6. nas php.ini,php.ini 配置文件常用详解
  7. MFC 窗体样式修改
  8. 【每日算法】基数排序算法
  9. 抛物面天线的工作原理是什么?
  10. C 简单瞎搞题(牛客练习赛22)(bitset优化dp)
  11. cannot resolve symbol xxxx问题
  12. iptables指南
  13. 计算机网络安全基础知识复习
  14. dejavu-python的音频指纹识别库
  15. JavaScript swiper
  16. 论如何使用Python进行微信公众号的开发
  17. 商业模式是利益相关者的交易结构
  18. html 整体边距,html内容左右边距怎么设置
  19. 5G毫米波Vs毫米波通信模块
  20. local class incompatible: stream classdesc serialVersionUID = 4696092613551164015, local

热门文章

  1. WDM PON(无源光网络技术)
  2. 和顶会大佬一起,探索计算机视觉与未来黑科技
  3. validationQuery didn't return a row
  4. 这份最新阿里、腾讯、华为、字节等大厂的薪资和职级对比,你在哪个阶段?
  5. UIPATH 常用操作
  6. 亚马逊Listing优化,如何写五点描述值得你一看?
  7. BGP邻居特性及下一跳如何建立 学习笔记
  8. 山科大web开发————表格的制作(个人简历)
  9. java无法下载更新文件,java – 在更新JProgressBar的同时下载文件
  10. 2022-4-8 Leetcode 575.分糖果