国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

java使用poi讀取excel文檔的一種解決方案

legendaryedu / 1925人閱讀

摘要:本人在學習使用的過程中,需要驗證一下表格里面的數據是否與數據庫中的數據相等。上網看了一下資料自己寫了一個讀取文檔的方法,驗證數據庫的方法暫時還沒寫,自娛自樂,只能抽時間了。現在把讀取的方法分享出來。在讀取行數據的時候先轉換了一下格式。

本人在學習使用java的過程中,需要驗證一下excel表格里面的數據是否與數據庫中的數據相等。由于數據太多,故想著用java讀取excel數據再去數據庫驗證。上網看了一下資料自己寫了一個讀取excel文檔的方法,驗證數據庫的方法暫時還沒寫,自娛自樂,只能抽時間了。現在把讀取excel的方法分享出來。

    //讀取excel文檔,除第一行為標題外內容為數字
    public static List>> readExcel(File filepath) throws Exception{
        /*首先判斷文件是否存在
         * 在判斷文件類型,xls還是xlsx
         */
        if (!filepath.exists()) {
            output("文件不存在!");
            }
        String  filename = filepath.toString();//轉化為string類型
        String fileType = filename.substring(filename.lastIndexOf(".") + 1, filename.length());//提取文件名后綴
        InputStream is = null;
        Workbook wb = null;
        try {
            is = new FileInputStream(filepath);
            if (fileType.equals("xls")) {
                wb = new HSSFWorkbook(is);
                } else if (fileType.equals("xlsx")) {
                    wb = new XSSFWorkbook(is);
                    } else {
                        output("文件名錯誤!");
                        }
            //新建集合,考慮到要用value值去查詢數據庫,所以value設置為string類型
            List>> result = new ArrayList>>();
            int sheetSize = wb.getNumberOfSheets();//獲取表格的個數
            for (int i = 0; i < sheetSize; i++) {//遍歷所有表格
                Sheet sheet = wb.getSheetAt(i);
                List> sheetList = new ArrayList>();
                List titles = new ArrayList();//放置所有的標題
                int rowSize = sheet.getLastRowNum() + 1;//此處getLastRowNum()方法獲取的行數從0開始,故要+1
                for (int j = 0; j < rowSize; j++) {//遍歷所有行
                    Row row = sheet.getRow(j);
                    if (row == null) {//略過空行
                        continue;
                        }
                    int cellSize = row.getLastCellNum();//獲取列數
                    if (j == 0) {//第一行是標題行
                        for (int k = 0; k < cellSize; k++) {//添加到標題集合中
                            Cell cell = row.getCell(k);
                            titles.add(cell.toString());
                            }
                        } else {//其他行是數據行,為數字
                            Map rowMap = new HashMap();//保存一行的數據
                            for (int k = 0; k < titles.size(); k++) {//遍歷保存此行數據
                                Cell cell = row.getCell(k);
                                String key = titles.get(k);
                                String value = null;
                                if (cell != null) {
                                    /*這里因為讀取excel數據默認值是double類型的,但我的數據都是整數,為了方便先進行一次轉換
                                     * 先判斷數據類型,然后先轉換然后在復制給value
                                     * 數值類型是0,字符串類型是1,公式型是2,空值是3,布爾值4,錯誤5
                                     */
                                    if (row.getCell(k).getCellType() == 0) {
                                        value =(int) row.getCell(k).getNumericCellValue()+"";
                                        }else {
                                            value = cell.toString();//轉換成string賦值給value
                                            }
                                    }
                                rowMap.put(key, value);//把數據存入map集合
                                }
                            sheetList.add(rowMap);//把存好行的數據存入表格的集合中
                            }
                    }
                result.add(sheetList);//把表格的數據存到excel的集合中
                }
            return result;
            } catch (FileNotFoundException e) {
                throw e;
                } finally {
                    if (is != null) {
                        is.close();
                        }
                    }
        }

方法的思路是從網上看來的,中間把代碼敲了一遍,發現很多地方不太對,不知道是不是因為年份久遠的原因。這個方法我做了一些自己的優化,輸入參數那個地方我改成了file類型,判斷了一下文件是否存在。在讀取行數據的時候先轉換了一下格式。中文的注釋,我也自己重新寫了一遍。希望能對你有所幫助。

一起來~FunTester

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/75840.html

相關文章

  • java 導出 excel 最佳實踐,java 大文件 excel 避免OOM(內存溢出) exce

    摘要:消費之后,多線程處理文件導出,生成文件后上傳到等文件服務器。前端直接查詢并且展現對應的任務執行列表,去等文件服務器下載文件即可。這客戶體驗不友好,而且網絡傳輸,系統占用多種問題。拓展閱讀導出最佳實踐框架 產品需求 產品經理需要導出一個頁面的所有的信息到 EXCEL 文件。 需求分析 對于 excel 導出,是一個很常見的需求。 最常見的解決方案就是使用 poi 直接同步導出一個 exc...

    K_B_Z 評論0 收藏0
  • 使用ApachePOI生成XLSX格式Excel文檔大數據量導出

    摘要:最近在做使用進行大數據量導出,現在把其整理成工具類供大家參考。版本增加了前綴為相關的類,主要用于大數據量的寫入與讀取。 最近在做使用POI進行大數據量導出,現在把其整理成工具類供大家參考。Apache POI 3.8版本增加了前綴為SXSSF相關的類,主要用于大數據量的寫入與讀取。關于ApachePOI導出Excel基本的使用我這里就不詳解了,具體參考: Apache POI官方網站...

    Shihira 評論0 收藏0
  • POI Sax 事件驅動解析Excel2007文件(較大數據量的讀存導出)

    摘要:方式解析全稱,它是一個接口,也是一個軟件包。另外,推模型可用于廣播環境,能夠同時注冊多個,并行接收事件,而不是在一個管道中一個接一個地進行處理。這些語法分析器是最靈活的,因為它們還支持。 xcel2007版本的代碼如下,本文主要是用于POI解析大文件Excel容易出現內存溢出的現象而提出解決方案,故此解決了大數據量的Excel文件解析的難度,在此拿出來貢獻給大家,謝謝! 1.Offic...

    cod7ce 評論0 收藏0
  • 慕課網_《解密JAVA實現Excel導入導出》學習總結

    時間:2017年07月06日星期四說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學源碼:無學習源碼:https://github.com/zccodere/s... 第一章:課程介紹 1-1 預備知識 基礎知識 struts2框架(上傳下載功能) xml解析技術(導入模板) JQuery EasyUI(前臺美觀) 課程目錄 實現方式 定制導入模版 導入文件 導...

    enrecul101 評論0 收藏0
  • POI讀取文件的最佳實踐

    摘要:我最近做的一個工具就是讀取計算機中的以及文件。經常在讀取某些特別大的文件的時候都會帶來一個內存溢出的問題。以上,就是我在使用讀取文件的一些探索和發現,希望對你能有所幫助。 POI是 Apache 旗下一款讀寫微軟家文檔聲名顯赫的類庫。應該很多人在做報表的導出,或者創建 word 文檔以及讀取之類的都是用過 POI。POI 也的確對于這些操作帶來很大的便利性。我最近做的一個工具就是讀取計...

    bingchen 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<