利用POI读取Excel文件

来源:互联网 发布:js获取当前触发事件 编辑:程序博客网 时间:2024/05/29 09:31

前几天实现了利用POI创建Excel文件,今天分享一下如何利用POI读取Excel文件。


要读取的文件内容,以下截图已给出:



下面讲读取文件内容的方法。


先创建一个读取Excel的工具类。

/** * 操作Excel表格的功能类 */public class ExcelReader {    private POIFSFileSystem fs;    private HSSFWorkbook wb;    private HSSFSheet sheet;    private HSSFRow row;    /**     * 读取Excel表格表头的内容     * @param InputStream     * @return String 表头内容的数组     */    public String[] readExcelTitle(InputStream is)     {        try         {        //获得文件输入流对象            fs = new POIFSFileSystem(is);            //获得与文件输入流相关的工作簿对象            wb = new HSSFWorkbook(fs);        }         catch (IOException e)         {        }        //获得工作簿的第一张工作表        sheet = wb.getSheetAt(0);        //获得工作表的首行        row = sheet.getRow(0);        // 标题总列数        int colNum = row.getPhysicalNumberOfCells();        //String数组保存首行的各个标题        String[] title = new String[colNum];        for (int i = 0; i < colNum; i++) {            title[i] = getCellFormatValue(row.getCell(i));        }        return title;    }    /**     * 读取Excel数据内容     * @param InputStream     * @return Map 包含单元格数据内容的Map对象     */    public Map<Integer, String> readExcelContent(InputStream is)     {    //Map集合存储正文各行的内容,键为行的索引,值为该行所有数据连成的字符串        Map<Integer, String> content = new HashMap<Integer, String>();        String str = "";        try         {            fs = new POIFSFileSystem(is);            wb = new HSSFWorkbook(fs);        }         catch (IOException e)         {                   }        sheet = wb.getSheetAt(0);        // 得到总行数        int rowNum = sheet.getLastRowNum();        row = sheet.getRow(1);        // 得到总列数        int colNum = row.getPhysicalNumberOfCells();        // 正文内容应该从第二行开始,第一行为表头的标题        for (int i = 1; i <= rowNum; i++)         {            row = sheet.getRow(i);            int j = 0;            while (j < colNum)             {            //将i行的内容转格式后加到str后                // 每个单元格的数据内容用"-"分割开,以后需要时用String类的replace()方法还原数据                str += getCellFormatValue(row.getCell(j)) + "----";                j++;            }            //将存好的str放到Map容器中            content.put(i, str);            str = "    ";        }        return content;    }    /**     * 根据HSSFCell类型设置数据     * @param cell     * @return     */    private String getCellFormatValue(HSSFCell cell)     {    //cellvalue用来存储格式成字符串的单元格数据        String cellvalue = "";        //非空        if (cell != null)         {                    // 判断当前Cell的Type:数值型,公式型,字符串型            switch (cell.getCellType())             {            case HSSFCell.CELL_TYPE_NUMERIC:            cellvalue =String.valueOf(cell.getNumericCellValue());            break;            case HSSFCell.CELL_TYPE_FORMULA:             cellvalue=String.valueOf(cell.getCellFormula());            break;             case HSSFCell.CELL_TYPE_STRING:                cellvalue = cell.getStringCellValue();                break;            default:            cellvalue = " ";            break;            }        }         //为空返回空字符串        else            cellvalue = "";                return cellvalue;    }}

然后创建个测试类,利于工具类关联要读取的文件。(我的文件在g盘目录下)

public class Demo {public static void main(String[] args) {InputStream  is=null;try{            // 对读取Excel表格标题测试            is = new FileInputStream("g:\\Book.xls");            ExcelReader excelReader = new ExcelReader();            String[] title = excelReader.readExcelTitle(is);            System.out.println("获得Excel表格的标题:");            for (String s : title)                 System.out.print(s + " ");            // 对读取Excel表格内容测试            Map<Integer, String> map = excelReader.readExcelContent(is);            System.out.println("\n获得Excel表格的内容:");            for (int i = 1; i <= map.size(); i++)             {                System.out.println(map.get(i));            }        } catch (FileNotFoundException e) {            System.out.println("未找到指定路径的文件!");            e.printStackTrace();        } finally      { try  {is.close(); }  catch (IOException e)  { }     }}}



运行程序,控制台将会显示下列内容。



这样就实现了对Excel文件的读取!

0 0
原创粉丝点击