java读取excel数据 需要poi组件
Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能。
结构:
HSSF - 提供读写Microsoft Excel格式档案的功能。
XSSF - 提供读写Microsoft Excel OOXML格式档案的功能。
HWPF - 提供读写Microsoft Word格式档案的功能。
HSLF - 提供读写Microsoft PowerPoint格式档案的功能。
HDGF - 提供读写Microsoft Visio格式档案的功能。
以下是实例程序:
Java代码
1.package excelread;
2.
3.import java.io.FileInputStream;
4.import java.io.FileNotFoundException;
5.import java.io.IOException;
6.import java.io.InputStream;
7.import java.util.Date;
8.import java.util.HashMap;
9.import java.util.Map;
10.
11.import org.apache.poi.hssf.usermodel.HSSFCell;
12.import org.apache.poi.hssf.usermodel.HSSFRow;
13.import org.apache.poi.hssf.usermodel.HSSFSheet;
14.import org.apache.poi.hssf.usermodel.HSSFWorkbook;
15.import org.apache.poi.poifs.filesystem.POIFSFileSystem;
16.
17./**
18. * 操作Excel表格的功能类
19. * @author:hnylj
20. * @version 1.0
21. */
22.public class ExcelReader {
23. private POIFSFileSystem fs;
24. private HSSFWorkbook wb;
25. private HSSFSheet sheet;
26. private HSSFRow row;
27. /**
28. * 读取Excel表格表头的内容
29. * @param InputStream
30. * @return String 表头内容的数组
31. *
32. */
33. public String[] readExcelTitle(InputStream is) {
34. try {
35. fs = new POIFSFileSystem(is);
36. wb = new HSSFWorkbook(fs);
37. } catch (IOException e) {
38. e.printStackTrace();
39. }
40. sheet = wb.getSheetAt(0);
41. row = sheet.getRow(0);
42. //标题总列数
43. int colNum = row.getPhysicalNumberOfCells();
44. String[] title = new String[colNum];
45. for (int i=0; i<colNum; i++) {
46. title[i] = getStringCellValue(row.getCell((short) i));
47. }
48. return title;
49. }
50.
51. /**
52. * 读取Excel数据内容
53. * @param InputStream
54. * @return Map 包含单元格数据内容的Map对象
55. */
56. public Map<Integer,String> readExcelContent(InputStream is) {
57. Map<Integer,String> content = new HashMap<Integer,String>();
58. String str = "";
59. try {
60. fs = new POIFSFileSystem(is);
61. wb = new HSSFWorkbook(fs);
62. } catch (IOException e) {
63. e.printStackTrace();
64. }
65. sheet = wb.getSheetAt(0);
66. //得到总行数
67. int rowNum = sheet.getLastRowNum();
68. row = sheet.getRow(0);
69. int colNum = row.getPhysicalNumberOfCells();
70. //正文内容应该从第二行开始,第一行为表头的标题
71. for (int i = 1; i <= rowNum; i++) {
72. row = sheet.getRow(i);
73. int j = 0;
74. while (j<colNum) {
75. //每个单元格的数据内容用"-"分割开,以后需要时用String类的replace()方法还原数据
76. //也可以将每个单元格的数据设置到一个javabean的属性中,此时需要新建一个javabean
77. str += getStringCellValue(row.getCell((short) j)).trim() + "-";
78. j ++;
79. }
80. content.put(i, str);
81. str = "";
82. }
83. return content;
84. }
85.
86. /**
87. * 获取单元格数据内容为字符串类型的数据
88. * @param cell Excel单元格
89. * @return String 单元格数据内容
90. */
91. private String getStringCellValue(HSSFCell cell) {
92. String strCell = "";
93. switch (cell.getCellType()) {
94. case HSSFCell.CELL_TYPE_STRING:
95. strCell = cell.getStringCellValue();
96. break;
97. case HSSFCell.CELL_TYPE_NUMERIC:
98. strCell = String.valueOf(cell.getNumericCellValue());
99. break;
100. case HSSFCell.CELL_TYPE_BOOLEAN:
101. strCell = String.valueOf(cell.getBooleanCellValue());
102. break;
103. case HSSFCell.CELL_TYPE_BLANK:
104. strCell = "";
105. break;
106. default:
107. strCell = "";
108. break;
109. }
110. if (strCell.equals("") || strCell == null) {
111. return "";
112. }
113. if (cell == null) {
114. return "";
115. }
116. return strCell;
117. }
118.
119. /**
120. * 获取单元格数据内容为日期类型的数据
121. * @param cell Excel单元格
122. * @return String 单元格数据内容
123. */
124. private String getDateCellValue(HSSFCell cell) {
125. String result = "";
126. try {
127. int cellType = cell.getCellType();
128. if (cellType == HSSFCell.CELL_TYPE_NUMERIC) {
129. Date date = cell.getDateCellValue();
130. result = (date.getYear() + 1900) + "-" + (date.getMonth() + 1)
131. + "-" + date.getDate();
132. } else if (cellType == HSSFCell.CELL_TYPE_STRING) {
133. String date = getStringCellValue(cell);
134. result = date.replaceAll("[年月]", "-").replace("日", "").trim();
135. } else if (cellType == HSSFCell.CELL_TYPE_BLANK) {
136. result = "";
137. }
138. } catch (Exception e) {
139. System.out.println("日期格式不正确!");
140. e.printStackTrace();
141. }
142. return result;
143. }
144.
145. public static void main(String[] args) {
146. try {
147. //对读取Excel表格标题测试
148. InputStream is = new FileInputStream("C:\\Excel表格测试.xls");
149. ExcelReader excelReader = new ExcelReader();
150. String[] title = excelReader.readExcelTitle(is);
151. System.out.println("获得Excel表格的标题:");
152. for (String s : title) {
153. System.out.print(s + " ");
154. }
155.
156. //对读取Excel表格内容测试
157. InputStream is2 = new FileInputStream("C:\\Excel表格测试.xls");
158. Map<Integer,String> map = excelReader.readExcelContent(is2);
159. System.out.println("获得Excel表格的内容:");
160. for (int i=1; i<=map.size(); i++) {
161. System.out.println(map.get(i));
162. }
163. } catch (FileNotFoundException e) {
164. System.out.println("未找到指定路径的文件!");
165. e.printStackTrace();
166. }
167. }
168.}