public class POIExcelUtil
{
/** 总行数 */
private int totalRows = 0;
/** 总列数 */
private int totalCells = 0;
/** 构造方法 */
public POIExcelUtil()
{}
/**
* <ul>
* <li>Description:[根据文件名读取excel文件]</li>
* <li>Created by [Huyvanpull] [Jan 20, 2010]</li>
* <li>Midified by [modifier] [modified time]</li>
* <ul>
*
* @param fileName
* @return
* @throws Exception
*/
public List<ArrayList<String>> read(String fileName)
{
List<ArrayList<String>> dataLst = new ArrayList<ArrayList<String>>();
/** 检查文件名是否为空或者是否是Excel格式的文件 */
if (fileName == null || !fileName.matches("^.+\\.(?i)((xls)|(xlsx))$"))
{
return dataLst;
}
boolean isExcel2003 = true;
/** 对文件的合法性进行验证 */
if (fileName.matches("^.+\\.(?i)(xlsx)$"))
{
isExcel2003 = false;
}
/** 检查文件是否存在 */
File file = new File(fileName);
if (file == null || !file.exists())
{
return dataLst;
}
try
{
/** 调用本类提供的根据流读取的方法 */
dataLst = read(new FileInputStream(file), isExcel2003);
}
catch (Exception ex)
{
ex.printStackTrace();
}
/** 返回最后读取的结果 */
return dataLst;
}
/**
* <ul>
* <li>Description:[根据流读取Excel文件]</li>
* <li>Created by [Huyvanpull] [Jan 20, 2010]</li>
* <li>Midified by [modifier] [modified time]</li>
* <ul>
*
* @param inputStream
* @param isExcel2003
* @return
*/
public List<ArrayList<String>> read(InputStream inputStream,
boolean isExcel2003)
{
List<ArrayList<String>> dataLst = null;
try
{
/** 根据版本选择创建Workbook的方式 */
Workbook wb = isExcel2003 ? new HSSFWorkbook(inputStream)
: new XSSFWorkbook(inputStream);
dataLst = read(wb);
}
catch (IOException e)
{
e.printStackTrace();
}
return dataLst;
}
/**
* <ul>
* <li>Description:[得到总行数]</li>
* <li>Created by [Huyvanpull] [Jan 20, 2010]</li>
* <li>Midified by [modifier] [modified time]</li>
* <ul>
*
* @return
*/
public int getTotalRows()
{
return totalRows;
}
/**
* <ul>
* <li>Description:[得到总列数]</li>
* <li>Created by [Huyvanpull] [Jan 20, 2010]</li>
* <li>Midified by [modifier] [modified time]</li>
* <ul>
*
* @return
*/
public int getTotalCells()
{
return totalCells;
}
/**
* <ul>
* <li>Description:[读取数据]</li>
* <li>Created by [Huyvanpull] [Jan 20, 2010]</li>
* <li>Midified by [modifier] [modified time]</li>
* <ul>
*
* @param wb
* @return
*/
private List<ArrayList<String>> read(Workbook wb)
{
List<ArrayList<String>> dataLst = new ArrayList<ArrayList<String>>();
/** 得到第一个shell */
Sheet sheet = wb.getSheetAt(0);
this.totalRows = sheet.getPhysicalNumberOfRows();
if (this.totalRows >= 1 && sheet.getRow(0) != null)
{
this.totalCells = sheet.getRow(0).getPhysicalNumberOfCells();
}
/** 循环Excel的行 */
for (int r = 0; r < this.totalRows; r++)
{
Row row = sheet.getRow(r);
if (row == null)
{
continue;
}
ArrayList<String> rowLst = new ArrayList<String>();
/** 循环Excel的列 */
for (short c = 0; c < this.getTotalCells(); c++)
{
Cell cell = row.getCell(c);
String cellValue = "";
if (cell == null)
{
rowLst.add(cellValue);
continue;
}
/** 处理数字型的,自动去零 */
if (Cell.CELL_TYPE_NUMERIC == cell.getCellType())
{
/** 在excel里,日期也是数字,在此要进行判断 */
if (HSSFDateUtil.isCellDateFormatted(cell))
{
cellValue = DateUtil.get4yMdHms(cell.getDateCellValue());
}
else
{
cellValue = getRightStr(cell.getNumericCellValue() + "");
}
}
/** 处理字符串型 */
else if (Cell.CELL_TYPE_STRING == cell.getCellType())
{
cellValue = cell.getStringCellValue();
}
/** 处理布尔型 */
else if (Cell.CELL_TYPE_BOOLEAN == cell.getCellType())
{
cellValue = cell.getBooleanCellValue() + "";
}
/** 其它的,非以上几种数据类型 */
else
{
cellValue = cell.toString() + "";
}
rowLst.add(cellValue);
}
dataLst.add(rowLst);
}
return dataLst;
}
/**
* <ul>
* <li>Description:[正确地处理整数后自动加零的情况]</li>
* <li>Created by [Huyvanpull] [Jan 20, 2010]</li>
* <li>Midified by [modifier] [modified time]</li>
* <ul>
*
* @param sNum
* @return
*/
private String getRightStr(String sNum)
{
DecimalFormat decimalFormat = new DecimalFormat("#.000000");
String resultStr = decimalFormat.format(new Double(sNum));
if (resultStr.matches("^[-+]?\\d+\\.[0]+$"))
{
resultStr = resultStr.substring(0, resultStr.indexOf("."));
}
return resultStr;
}
/**
* <ul>
* <li>Description:[测试main方法]</li>
* <li>Created by [Huyvanpull] [Jan 20, 2010]</li>
* <li>Midified by [modifier] [modified time]</li>
* <ul>
*
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception
{
List<ArrayList<String>> dataLst = new POIExcelUtil()
.read("e:/Book1_shao.xls");
for (ArrayList<String> innerLst : dataLst)
{
StringBuffer rowData = new StringBuffer();
for (String dataStr : innerLst)
{
rowData.append(",").append(dataStr);
}
if (rowData.length() > 0)
{
System.out.println(rowData.deleteCharAt(0).toString());
}
}
}
}
- 浏览: 372130 次
- 性别:
- 来自: 深圳
最新评论
-
qw575408794:
请问 直角平面坐标 转 经纬度 怎么转 java实现,或者 ...
关于经纬度坐标转换的方法 -
horsely:
JavaScript图表FusionCharts免费在线公开课 ...
FusionCharts在Java中的基本使用 -
rzh0001:
good job
Excel 日期格式与数字格式转换的BUG -
springdata-jpa:
java quartz定时任务demo教程源代码下载,地址:h ...
[JAVA]定时任务之-Quartz使用篇 -
liuweihug:
fusioncharts 图片2种方式使用java导出 - 项 ...
FusionCharts在Java中的基本使用
发表评论
-
cpu架构为power的JDk部署 jdk7 ppc64
2015-01-29 11:49 1949IBM提供了在cpu架构为power的linux操作系统的J ... -
CentOS 6.3下Samba服务器的安装与配置
2015-01-04 11:11 2538最近公司存储服务器 ... -
Intellij IDEA 快捷键整理
2014-10-21 15:54 857【常规】 Ctrl+Shift + Enter,语句完成 ... -
Maven: javax.sql:jdbc-stdext:2.0
2014-10-21 15:05 904今天搞maven遇到了这个小问题,google下,也没合适的 ... -
MySQL监控、性能分析——工具篇
2014-10-15 14:36 4896MySQL越来越被更多企业接受,随着企业发展,MySQL存储 ... -
Tomcat启动分析 【转】
2014-10-13 16:07 8841 - Tomcat Server的组成 ... -
MySQL Migration Toolkit initialized java loader 出错提示jre版本问题
2014-09-29 13:55 1780如果initialized java loader 出错提示j ... -
MySQL Migration Toolkit的使用
2014-09-29 13:54 1115MySQL Migration Toolkit是MySQL出 ... -
Oracle to MySQL
2014-09-29 13:52 10191.java 实体的移植 主键生成策略有JPA 提供与 ... -
jacob常用异常处理
2014-09-17 16:53 3260com.jacob.com.ComFailException ... -
java 使用jacob 操作word
2014-09-17 16:39 2352/** * word文档 */ ... -
HttpCLient实现对被GZip压缩过的Response进行解压
2014-05-22 15:33 11980发送请求(要求服务端对response进行GZip压缩): ... -
关于HttpClient的总结
2014-05-22 14:28 1207关于Httpclient的使用总结如下: (1)当Htt ... -
设置Tomcat的JAVA_OPTS参数
2014-03-20 17:23 1054修改 TOMCAT/bin/catalina.bat添加se ... -
Java_Thumbnailator
2014-03-20 14:49 709Thumbnailator 是一个为Java界面更流畅的缩略图 ... -
maven添加oracle驱动
2013-10-09 16:44 1225由于oracle商业版权问题,maven是不可以直接下载ja ... -
直接使用SQL操作Oracle空间数据的原理以及配置方法
2013-07-10 16:43 1719最近一直接到售前的请求,客户现场成功部署SDE for Or ... -
ORA-22992: 无法使用从远程表选择的 LOB 定位器
2013-07-09 11:08 1040现象描述:执行一条语句时报错,该语句是:select * ... -
ORA-28575:无法打开与外部过程代理程序的RPC连接
2013-07-09 10:54 18091. 修改listener.ora文件,增加如下内容,注意该 ... -
DBMS_STATS分析表
2013-07-05 16:54 908作用:DBMS_STATS.GATHER_TABLE_ST ...
相关推荐
Java 操作Excel poi读写excel,所需要的jar包 https://blog.csdn.net/u014646662/article/details/83217382
java读写Excel,POI.JAR,Word内容读取
ExcelDemo_Excel导出_下载_POI读excel_JXL读写excel_java读写excel_列宽_读取合并或拆分单元格内容
java读取excel 表格数据。 public static void main(String[] args) { String[][] content=POIExcelUtils.read("E:\\1.xlsx"); for(int i=0;i;i++) { if(content[i]!=null){ for(int j=0;j[i].length;j...
poi读写excel,poi总结; poi读写excel,poi总结 poi读写excel,poi总结
java POI读取2003 2007 Excel 里面附有POI相关jar包,发出来给大家分享下。
该工具类是poi基于事件驱动去读取海量excel数据,解决内存溢出以及空单元格的问题。 该压缩包里面有两个文件,TestExcel.java主要是原始的处理方法,操作简单,适合小数据量的读取。 ExampleEventUserModelUtil.java...
POI处理excel文件,主要包括Excel的读取、写入,各种数据格式处理、单元格合并、注释、下拉列表及单元格的边框、背景色、宽度调整等。
POI生成Excel POI读取Excel java操作Excel Servlet生成Excel web项目,包含含读取Excel与生成Excel方法
java中poi读写excel封装工具类(兼容office2003和2007等版本),绝对可用的例子!
POI 读取 WORD EXCEL POWERPOINT 2003 2007 java 读取 WORD EXCEL POWERPOINT 2003 2007
Java通过POI读取Excel遍历数据,根本word模板批量生成word文档,demo可运行,可根据需求修改
Java POI下载Excel模板 Excel带有下拉框的模板,并有详细注释,生成exlcel的下拉框,必填项标红,数字栏位防止科学计数法,并设置Excel标题样式
poi.zip java读取excel文件,其中bin压缩文件中含有jar包,eclipse导入时可直接使用;src压缩文件含有java源代码,需要阅读源码的童鞋可以下载使用
java poi读取excel 2007 存贮在list中
使用poi读取写入复杂excel内容包括样式,工具类
poi.jar java读取excel 的 jar包
只有读取,没有写入
完美解决java读取excel内存溢出问题,希望可以帮到大家
Java POI读取Office excel (2003,2007)及相关jar包。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。