国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

java 使用POI批量導入excel數據

2019-11-15 00:55:12
字體:
來源:轉載
供稿:網友
java 使用POI批量導入Excel數據

一、定義

  Apache POI是Apache軟件基金會的開放源碼函式庫,POI提供API給Java程序對Microsoft Office格式檔案讀和寫的功能。

二、所需jar包

三、簡單的一個讀取excel的demo

1、讀取文件方法

     /**     * 讀取出filePath中的所有數據信息     * @param filePath excel文件的絕對路徑     *      */        public static void getDataFromExcel(String filePath)    {        //String filePath = "E://123.xlsx";                //判斷是否為excel類型文件        if(!filePath.endsWith(".xls")&&!filePath.endsWith(".xlsx"))        {            System.out.

2、測試

public static void main(String[] args)     {                getDataFromExcel("E:"+ File.separator +"123.xlsx");    }

3、原始數據

4、結果

名字:A1,經緯度:1名字:A2,經緯度:2名字:A3,經緯度:3名字:A4,經緯度:4名字:A5,經緯度:5名字:A6,經緯度:6名字:A7,經緯度:7名字:A8,經緯度:8名字:A9,經緯度:9名字:A10,經緯度:10名字:A11,經緯度:11

四、注意事項

1、運用多態,excel主要有.xls結尾(2003版本)和. xlsx(2007版本)兩種類型結尾的文件,分別需要用HSSFWorkbook對象對.xls文件進行讀取,用XSSFWorkbook對象對.xlsx文件進行讀取,直接使用他們共同的父類Workbook進行初始化對象有利于代碼的易用性。

2、通過流的方式初始化工作簿對象(Workbook),可以通過new XSSFWorkbook(文件絕對路徑)和new XSSFWorkbook(輸入流)兩種方式初始化對象,但是假如我們只是通過修改.xls文件的后綴名為.xlsx,這樣子當我們用new XSSFWorkbook(文件絕對路徑)來讀取文件的時候就會報錯,因為他本身就不是一個2007版本的excel類型的文件,讀取會報錯;假如我們是通過流的方式的話,可以避免這種情況,我們即使你修改了文件的后綴名,我們依然在初始化的時候能獲取到該對象是.xls類型文件,使用HSSFWorkbook對象進行處理,即能得出正確的結果。

五、增強版

  添加了判斷表頭是否符合規范,允許表頭對象的位置不同。進行了一定的解耦合。

    /**     *          * @param cell 一個單元格的對象     * @return 返回該單元格相應的類型的值     */    public static Object getRightTypeCell(Cell cell){            Object object = null;        switch(cell.getCellType())        {            case Cell.CELL_TYPE_STRING :            {                object=cell.getStringCellValue();                break;            }            case Cell.CELL_TYPE_NUMERIC :            {                cell.setCellType(Cell.CELL_TYPE_NUMERIC);                object=cell.getNumericCellValue();                break;            }                            case Cell.CELL_TYPE_FORMULA :            {                cell.setCellType(Cell.CELL_TYPE_NUMERIC);                object=cell.getNumericCellValue();                break;            }                        case Cell.CELL_TYPE_BLANK :            {                cell.setCellType(Cell.CELL_TYPE_BLANK);                object=cell.getStringCellValue();                break;            }        }        return object;    }    

/**     * 讀取出filePath中的所有數據信息     * @param filePath excel文件的絕對路徑     *      */        public static void getDataFromExcel2(String filePath)    {        List<Map<String,Integer>> list = new ArrayList<Map<String, Integer>>();        //判斷是否為excel類型文件        if(!filePath.endsWith(".xls")&&!filePath.endsWith(".xlsx"))        {            System.out.println("文件不是excel類型");        }                FileInputStream fis =null;        Workbook wookbook = null;        int flag = 0;                try        {            //獲取一個絕對地址的流              fis = new FileInputStream(filePath);        }        catch(Exception e)        {            e.printStackTrace();        }               try         {            //2003版本的excel,用.xls結尾            wookbook = new HSSFWorkbook(fis);//得到工作簿                     }         catch (Exception ex)         {            //ex.printStackTrace();            try            {                //2007版本的excel,用.xlsx結尾                                wookbook = new XSSFWorkbook(filePath);//得到工作簿            } catch (IOException e)            {                // TODO Auto-generated catch block                e.printStackTrace();            }        }                //得到一個工作表        Sheet sheet = wookbook.getSheetAt(0);                //獲得表頭        Row rowHead = sheet.getRow(0);              //根據不同的data放置不同的表頭        Map<Object,Integer> headMap = new HashMap<Object, Integer>();                        //判斷表頭是否合格  ------------------------這里看你有多少列        if(rowHead.getPhysicalNumberOfCells() != 2)        {            System.out.println("表頭列數與要導入的數據庫不對應");        }                try        {            //----------------這里根據你的表格有多少列            while (flag < 2)            {                Cell cell = rowHead.getCell(flag);                if (getRightTypeCell(cell).toString().equals("基站名"))                {                    headMap.put("jizhan", flag);                }                if (getRightTypeCell(cell).toString().equals("經緯度"))                {                    headMap.put("jingweidu", flag);                }                flag++;            }        } catch (Exception e)        {            e.printStackTrace();            System.out.println("表頭不合規范,請修改后重新導入");        }                        //獲得數據的總行數        int totalRowNum = sheet.getLastRowNum();                                //要獲得屬性        String name = "";        double latitude = 0;                if(0 == totalRowNum)        {            System.out.println("Excel內沒有數據!");        }                Cell cell_1 = null,cell_2 = null;               //獲得所有數據        for(int i = 1 ; i <= totalRowNum ; i++)        {            //獲得第i行對象            Row row = sheet.getRow(i);                        try            {                cell_1 = row.getCell(headMap.get("jizhan"));                cell_2 = row.getCell(headMap.get("jingweidu"));            } catch (Exception e)            {                e.printStackTrace();                System.out.println("獲取單元格錯誤");            }                        try            {                //基站                name = (String) getRightTypeCell(cell_1);                //經緯度                latitude = (Double) getRightTypeCell(cell_2);            } catch (ClassCastException e)            {                e.printStackTrace();                System.out.println("數據不全是數字或全部是文字!");            }            System.out.println("名字:"+name+",經緯度:"+latitude);                    }    }    

異常情況:

應將下面這段代碼

try         {            //2003版本的excel,用.xls結尾            wookbook = new HSSFWorkbook(fis);//得到工作簿                     }         catch (Exception ex)         {            //ex.printStackTrace();            try            {                //2007版本的excel,用.xlsx結尾                                wookbook = new XSSFWorkbook(fis);//得到工作簿            } catch (IOException e)            {                // TODO Auto-generated catch block                e.printStackTrace();            }        }

改為:

        try         {            //2003版本的excel,用.xls結尾            wookbook = new HSSFWorkbook(fis);//得到工作簿                     }         catch (Exception ex)         {            //ex.printStackTrace();            try            {                //這里需要重新獲取流對象,因為前面的異常導致了流的關閉—————————————————————————————加了這一行                 fis = new FileInputStream(filePath);                //2007版本的excel,用.xlsx結尾                                wookbook = new XSSFWorkbook(filePath);//得到工作簿            } catch (IOException e)            {                // TODO Auto-generated catch block                e.printStackTrace();            }        }

解析:因為前面異常導致了流的關閉,所以需要重新創建一個流對象。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鹤壁市| 富蕴县| 都兰县| 巴楚县| 长沙市| 凤台县| 宜兰市| 太白县| 府谷县| 册亨县| 瑞金市| 临江市| 沙田区| 个旧市| 彭泽县| 宜宾县| 富川| 固安县| 大庆市| 自治县| 达孜县| 曲水县| 大冶市| 新昌县| 宣化县| 富蕴县| 马鞍山市| 综艺| 阿图什市| 连平县| 信阳市| 区。| 平谷区| 井冈山市| 平山县| 集安市| 什邡市| 建平县| 高邑县| 乌鲁木齐县| 云林县|