使用的POI包是poi-2.5.1-final-20040804.jar,用讯雷搜的。也可以到http://apache.justdn.org/jakarta/poi/下载src。加入到Java Build Path中。把Excel的内容抽取出来,输出到控制台的代码:
1
package test;
2
3
import java.io.BufferedReader;
4
import java.io.FileInputStream;
5
import java.io.IOException;
6
import java.io.InputStream;
7
import java.io.InputStreamReader;
8
9
import org.apache.poi.hssf.usermodel.HSSFCell;
10
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
11
import org.apache.poi.hssf.usermodel.HSSFRow;
12
import org.apache.poi.hssf.usermodel.HSSFSheet;
13
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
14
15
public class ExcelReader {
16
//创建文件输入
17
private BufferedReader reader = null;
18
//文件类型
19
private String filetype;
20
//文件二进制输入流
21
private InputStream is =null;
22
//当前的Sheet
23
private int currSheet;
24
//当前位置
25
private int currPosition;
26
//Sheet数量
27
private int numOfSheets;
28
//HSSFWorkbook
29
HSSFWorkbook workbook = null;
30
//设置cell之间以空格分隔
31
private static String EXCEL_LINE_DELIMITER = " ";
32
//设置最大列数
33
private static int MAX_EXCEL_COLUMNS = 64;
34
/**
35
* 构造函数创建一个ExcelReader
36
* @param inputfile
37
* @throws IOException
38
* @throws Exception
39
*/
40
public ExcelReader(String inputfile) throws IOException, Exception{
41
//判断参数是否为空或者没有意义
42
if(inputfile == null || inputfile.trim().equals("")){
43
throw new IOException("no input file specified");
44
}
45
//取得文件名后缀并赋值给filetype
46
this.filetype = inputfile.substring(inputfile.lastIndexOf(".")+1);
47
//设置开始行为0
48
currPosition = 0;
49
//设置当前位置为0
50
currSheet = 0;
51
//创建文件输入流
52
is = new FileInputStream(inputfile);
53
54
//判断文件格式
55
if(filetype.equalsIgnoreCase("txt")){
56
//如果是txt则直接创建BufferedReader读取
57
reader = new BufferedReader(new InputStreamReader(is));
58
}else if(filetype.equalsIgnoreCase("xls")){
59
workbook = new HSSFWorkbook(is);
60
//设置Sheet数
61
numOfSheets = workbook.getNumberOfSheets();
62
}else{
63
throw new Exception("File Type Not Supported");
64
}
65
}
66
/**
67
* 函数readLine读取文件的一行
68
* @return
69
* @throws IOException
70
*/
71
public String readLine() throws IOException{
72
//如果是txt文件则通过reader读取
73
if(filetype.equalsIgnoreCase("txt")){
74
String str = reader.readLine();
75
//空行略去,直接读取下一行
76
while(str.trim().equals("")){
77
str = reader.readLine();
78
}
79
return str;
80
}
81
//如果是xls文件通过POI提供的API读取文件
82
else if(filetype.equalsIgnoreCase("xls")){
83
//根据currSheet的值获取当前的sheet
84
HSSFSheet sheet = workbook.getSheetAt(currSheet);
85
//判断当前行是否到当前Sheet的结尾
86
if(currPosition > sheet.getLastRowNum()){
87
//当前行位置清零
88
currPosition = 0;
89
//判断是否还有Sheet
90
while(++currSheet < numOfSheets){
91
//得到下一张sheet
92
sheet = workbook.getSheetAt(currSheet);
93
94
//当前行数是否已达到文件末尾
95
if(currPosition == sheet.getLastRowNum()){
96
continue;
97
}else{
98
//获取当前行数
99
int row = currPosition;
100
currPosition++;
101
//读取当前行数据
102
return getLine(sheet,row);
103
}
104
}
105
return null;
106
}
107
//获取当前行数
108
int row = currPosition;
109
currPosition++;
110
//读取当前行数据
111
return getLine(sheet,row);
112
}
113
return null;
114
}
115
116
/**
117
* 函数getLine返回Sheet的一行数据
118
* @param sheet
119
* @param row
120
* @return
121
*/
122
private String getLine(HSSFSheet sheet, int row){
123
//根据行数取得Sheet的一行
124
HSSFRow rowline = sheet.getRow(row);
125
//创建字符串缓冲区
126
StringBuffer buffer = new StringBuffer();
127
//获取当前行的列数
128
int fieldColumns = rowline.getLastCellNum();
129
HSSFCell cell = null;
130
//遍历所有列
131
for(int i=0;i<fieldColumns;i++){
132
//取得当前Cell
133
cell = rowline.getCell((short)i);
134
String cellvalue = null;
135
if(cell != null){
136
switch(cell.getCellType()){
137
case HSSFCell.CELL_TYPE_NUMERIC:{
138
//判断当前的Cell的Type是否为Date
139
if(HSSFDateUtil.isCellDateFormatted(cell)){
140
//如果是Date类型,取得该Cell的Date值
141
cellvalue = cell.getDateCellValue().toString();
142
}else {//如果是纯数字
143
Integer num = new Integer((int)cell.getNumericCellValue());
144
cellvalue = String.valueOf(num);
145
}
146
break;
147
}
148
//如果当前Cell的Type为String
149
case HSSFCell.CELL_TYPE_STRING:
150
//取得当前Cell的字符串
151
cellvalue = cell.getStringCellValue().replaceAll("'", "''");
152
break;
153
//默认的Cell值
154
default:
155
cellvalue = "";
156
}
157
}else{
158
cellvalue = "";
159
}
160
//在每个字段之间插入分隔符
161
buffer.append(cellvalue).append(EXCEL_LINE_DELIMITER);
162
}
163
return buffer.toString();
164
}
165
166
/**
167
* close函数执行流的关闭操作
168
*/
169
public void close(){
170
//如果is不为空,则关闭InputStream文件输入流
171
if(is != null){
172
try{
173
is.close();
174
}catch(IOException e){
175
is = null;
176
}
177
//如果Reader不为空,则关闭BufferedReader文件输入流
178
if(reader != null){
179
try{
180
reader.close();
181
}catch(IOException e){
182
reader = null;
183
}
184
}
185
}
186
}
187
/**
188
* @param args
189
*/
190
public static void main(String[] args) {
191
// TODO Auto-generated method stub
192
try {
193
ExcelReader er = new ExcelReader("d:\\index\\names.xls");
194
String line = er.readLine();
195
while(line != null){
196
System.out.println(line);
197
line = er.readLine();
198
}
199
er.close();
200
} catch (Exception e) {
201
// TODO Auto-generated catch block
202
e.printStackTrace();
203
}
204
205
}
206
}
207

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

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207
