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.}   

你可能感兴趣的:(java,apache,数据结构,Excel,Microsoft)