Java世界
学习笔记
导航
BlogJava
首页
新随笔
联系
聚合
管理
<
2012年6月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
留言簿
(11)
给我留言
查看公开留言
查看私人留言
收藏夹
大家的博客地址(1)
(rss)
随笔档案
2014年5月 (1)
2014年4月 (1)
2013年11月 (3)
2013年10月 (2)
2013年6月 (2)
2013年1月 (3)
2012年12月 (1)
2012年11月 (1)
2012年8月 (3)
2012年7月 (1)
2012年6月 (2)
2012年4月 (3)
2012年3月 (4)
2011年2月 (1)
2010年12月 (6)
2010年7月 (5)
2010年6月 (6)
2010年5月 (4)
2010年1月 (3)
2009年7月 (2)
2009年5月 (2)
2009年1月 (1)
2008年12月 (2)
2008年10月 (1)
2008年8月 (1)
2008年7月 (2)
2008年6月 (9)
2008年5月 (1)
2008年3月 (9)
2008年2月 (9)
2008年1月 (1)
2007年12月 (4)
2007年11月 (8)
2007年10月 (16)
文章档案
2007年11月 (8)
2007年10月 (1)
阅读排行榜
1. java字符串的各种编码转换 (213696)
2. 怎么查看端口占用情况?(150001)
3. 深入学习Oracle分区表及分区索引(46684)
4. 如何导入.sql文件到mysql中?(22509)
5. ORACLE中Like与Instr模糊查询性能大比拼(20798)
评论排行榜
1. 怎么查看端口占用情况?(38)
2. java字符串的各种编码转换 (25)
3. Files' name is invalid or does not exist (1205).错误解决方法(4)
4. JSON与JAVA数据的转换(3)
5. ORACLE中Like与Instr模糊查询性能大比拼(3)
常用链接
我的随笔
我的评论
我的参与
最新评论
统计
随笔 - 120
文章 - 9
评论 - 115
引用 - 0
积分与排名
积分 - 612439
排名 - 77
天籁村
新华网
雅虎
最新评论
1. re: ORACLE中Like与Instr模糊查询性能大比拼
我在oracle 10g中执行instr和like %%开销差不多呢?
--小龙在线
2. re: Files' name is invalid or does not exist (1205).错误解决方法
去玩儿
--二恶
3. re: Files' name is invalid or does not exist (1205).错误解决方法
sdfsd
--dedf
4. re: JPA插入或者修改数据的时候使用数据库表的default值(JPA动态插入动态更新)
健康减肥咖啡姐看风景
--123456789
5. re: 解决IE下Iframe的Session丢失
很好
--shickvip
Java POI读取Office excel (2003,2007)及相关jar包
poi jar包下载 :
http://poi.apache.org/
读取excel 文件的 java 代码:
[java]
view plain
copy
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.LinkedList;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ReadExcel {
/**
* 对外提供读取excel 的方法
* */
public static List<List<Object>> readExcel(File file) throws IOException{
String fileName = file.getName();
String extension = fileName.lastIndexOf(".")==-
1
?"":fileName.substring(fileName.lastIndexOf(".")+
1
);
if("xls".equals(extension)){
return read2003Excel(file);
}else if("xlsx".equals(extension)){
return read2007Excel(file);
}else{
throw new IOException("不支持的文件类型");
}
}
/**
* 读取 office 2003 excel
* @throws IOException
* @throws FileNotFoundException */
private static List<List<Object>> read2003Excel(File file) throws IOException{
List<List<Object>> list = new LinkedList<List<Object>>();
HSSFWorkbook hwb = new HSSFWorkbook(new FileInputStream(file));
HSSFSheet sheet = hwb.getSheetAt(
0
);
Object value = null;
HSSFRow row = null;
HSSFCell cell = null;
for(int i = sheet.getFirstRowNum();i<= sheet.getPhysicalNumberOfRows();i++){
row = sheet.getRow(i);
if (row == null) {
continue;
}
List<Object> linked = new LinkedList<Object>();
for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) {
cell = row.getCell(j);
if (cell == null) {
continue;
}
DecimalFormat df = new DecimalFormat("0");// 格式化 number String 字符
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 格式化日期字符串
DecimalFormat nf = new DecimalFormat("0.00");// 格式化数字
switch (cell.getCellType()) {
case XSSFCell.CELL_TYPE_STRING:
System.out.println(i+"行"+j+" 列 is String type");
value = cell.getStringCellValue();
break;
case XSSFCell.CELL_TYPE_NUMERIC:
System.out.println(i+"行"+j+" 列 is Number type ; DateFormt:"+cell.getCellStyle().getDataFormatString());
if("@".equals(cell.getCellStyle().getDataFormatString())){
value = df.format(cell.getNumericCellValue());
} else if("General".equals(cell.getCellStyle().getDataFormatString())){
value = nf.format(cell.getNumericCellValue());
}else{
value = sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue()));
}
break;
case XSSFCell.CELL_TYPE_BOOLEAN:
System.out.println(i+"行"+j+" 列 is Boolean type");
value = cell.getBooleanCellValue();
break;
case XSSFCell.CELL_TYPE_BLANK:
System.out.println(i+"行"+j+" 列 is Blank type");
value = "";
break;
default:
System.out.println(i+"行"+j+" 列 is default type");
value = cell.toString();
}
if (value == null || "".equals(value)) {
continue;
}
linked.add(value);
}
list.add(linked);
}
return list;
}
/**
* 读取Office 2007 excel
* */
private static List<List<Object>> read2007Excel(File file) throws IOException {
List<List<Object>> list = new LinkedList<List<Object>>();
// 构造 XSSFWorkbook 对象,strPath 传入文件路径
XSSFWorkbook xwb = new XSSFWorkbook(new FileInputStream(file));
// 读取第一章表格内容
XSSFSheet sheet = xwb.getSheetAt(
0
);
Object value = null;
XSSFRow row = null;
XSSFCell cell = null;
for (int i = sheet.getFirstRowNum(); i <= sheet
.getPhysicalNumberOfRows(); i++) {
row = sheet.getRow(i);
if (row == null) {
continue;
}
List<Object> linked = new LinkedList<Object>();
for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) {
cell = row.getCell(j);
if (cell == null) {
continue;
}
DecimalFormat df = new DecimalFormat("0");// 格式化 number String 字符
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 格式化日期字符串
DecimalFormat nf = new DecimalFormat("0.00");// 格式化数字
switch (cell.getCellType()) {
case XSSFCell.CELL_TYPE_STRING:
System.out.println(i+"行"+j+" 列 is String type");
value = cell.getStringCellValue();
break;
case XSSFCell.CELL_TYPE_NUMERIC:
System.out.println(i+"行"+j+" 列 is Number type ; DateFormt:"+cell.getCellStyle().getDataFormatString());
if("@".equals(cell.getCellStyle().getDataFormatString())){
value = df.format(cell.getNumericCellValue());
} else if("General".equals(cell.getCellStyle().getDataFormatString())){
value = nf.format(cell.getNumericCellValue());
}else{
value = sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue()));
}
break;
case XSSFCell.CELL_TYPE_BOOLEAN:
System.out.println(i+"行"+j+" 列 is Boolean type");
value = cell.getBooleanCellValue();
break;
case XSSFCell.CELL_TYPE_BLANK:
System.out.println(i+"行"+j+" 列 is Blank type");
value = "";
break;
default:
System.out.println(i+"行"+j+" 列 is default type");
value = cell.toString();
}
if (value == null || "".equals(value)) {
continue;
}
linked.add(value);
}
list.add(linked);
}
return list;
}
}
说明:该类中共封装了三个方法,对外提供的读取excel文件的方法,两个私有的分别读取excel2003和excel2007的方法。外部使用,只需调用readExcel 方法,传入一个File 参数,程序根据文件扩展名来判断选取那个方法来读取Excel文件。
posted on 2012-06-12 11:23
Rabbit
阅读(5931)
评论(0)
编辑
收藏
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
Powered by:
BlogJava
Copyright © Rabbit