ネイティブは、POIは、EXCELを導入読みます

彼らはこれを使用して最近のプロジェクトは、長い時間が無用の競合を持っています 

誰が未来が直接OKのチューニング方法でプロジェクトを、それをスローダウンするために使用されることはありません知っています。

それを記録します。私はこのような何かを書きたくありません 


輸入org.apache.poi.hssf.usermodel *。;
輸入org.apache.poi.poifs.filesystem.POIFSFileSystem;
輸入java.io.FileInputStream;
輸入java.io.FileNotFoundException。
インポートにjava.io.IOException;
輸入java.io.InputStreamを。
輸入java.text.SimpleDateFormatの。
輸入java.util.Date;
輸入java.util.HashMapを;
輸入java.util.Map;

 

パブリッククラスReadExcelUtil {
     プライベートPOIFSFileSystem fsを、
        プライベートHSSFWorkbookのWB;
        プライベートHSSFSheetシート。
        プライベートHSSFRow行。

        / **
         *ヘッダExcelスプレッドシートの内容を読み取る
         * @paramはIS
         * @return配列文字列ヘッダの内容
         * /
        パブリック文字列[] readExcelTitle(入力ストリームである。){
            試み{
                ; FS =新しい新しいPOIFSFileSystem(IS)
                WB =新しい新HSSFWorkbook(FS);
            }キャッチ(IOExceptionをE){
                e.printStackTrace();
            }
            シートwb.getSheetAt =(0);
            //最初の行ライン取得
            行をsheet.getRow =(0);
            表題の列の//総数
            row.getPhysicalNumberOfCells colNum引数= INT();
            文字列[] =新しい新しいタイトル文字列[colNum引数];
            {ため(I ++は; Iは<colNum引数I = 0 INT)
                タイトル[I] = getCellFormatValue()row.getCell((ショートI))。
            }
            タイトルを返します。
        }

        / **
         *コンテンツデータExcelを読み込む
         * @paramはIS
         セルの内容を含むマップオブジェクト* @returnマップデータ
         * /
        公共の地図<整数、文字列> readExcelContent(入力ストリームがIS){
            地図<整数、文字列> HashMapの新しい新しいコンテンツ= <整数、文字列>();
            文字列STR = "";
            文字列strCell = "";
            試み{
                FS =新しい新しいPOIFSFileSystem(IS);
                WB =新しい新しいHSSFWorkbook(FS);
            }キャッチ(IOExceptionをE){
                e.printStackTrace() ;
            }
            シートwb.getSheetAt =(0);
            //行数を取得
            )(INTたrowNum = sheet.getLastRowNumと、
            //第0行1行が本明細書に組み込まれているので、インデックスは2から始まる
            行= sheet.getRow(2);
            INT colNum引数row.getPhysicalNumberOfCells =();
            第一、第二の行から//テキストコンテンツを開始すべき見出し行動ヘッダ
            {ため(; I <=たrowNum I ++がI = 2 INT)
                行= sheet.getRow(I);
                INT J = 0;
                一方(J <colNum引数){
                    strCell = getStringCellValue(row.getCell(J ));
                    STR = strCell + + " - ";
                   // row.getCell STR + =((ショート)J)+ "^";
                    J ++;
                }
                content.put(I、STR);
                STR = "";
            }
            リターンコンテンツ;
        }

        / **
         * string型のコンテンツデータを取得するセルデータが
         *
         * @paramセルExcelのセル
         セルの* @return列データの内容
         * /
        プライベート文字列getStringCellValue(HSSFCell細胞){
            文字列strCell = "";
            スイッチ(セル.getCellType()){
                ケースHSSFCell.CELL_TYPE_STRING:
                    strCell cell.getStringCellValue =();
                    BREAK;
                ケースHSSFCell.CELL_TYPE_NUMERIC:
                    strCell String.valueOf =((INT)cell.getNumericCellValue());
                    BREAK;
                ケースHSSFCell.CELL_TYPE_BOOLEAN。
                    strCell = String.valueOf(cell.getBooleanCellValue())。
                    ブレーク;
                ケースHSSFCell.CELL_TYPE_BLANK:
                    strCell = "";
                    ブレーク;
                デフォルト:
                    strCell = "";
                    ブレーク;
            }
            IF(strCell.equals( "")|| strCell == NULL){
                リターン""。
            }
            IF(セル== NULL){
                リターン""。
            }
            strCellを返します。
        }

        / **
         *コンテンツデータセルの日付の値を取得する
         *
         * @paramセル
         * Excelのセル
         のセルの* @return列データの内容
         * /
        プライベート文字列getDateCellValue(HSSFCellセル){
            文字列の結果=「」;
            試み{
                int型= cell.getCellTypeのcelltype();
                IF(celltype == HSSFCell.CELL_TYPE_NUMERIC){
                    日付cell.getDateCellValue = DATE();
                    結果=(Date.getYear()+ 1900)+ " - " +(date.getMonth()+ 1)
                            + " - " + date.getDate();
                }そうでなければ(celltype == HSSFCell.CELL_TYPE_STRING IF){
                    文字列、日付= getStringCellValue(セル)
                    結果は= date.replaceAll( "[年月]"、 " - ")( ""、 "日")を置き換える.trim()。
                }そうであれば(cellType == HSSFCell.CELL_TYPE_BLANK){
                    結果= "";
                }
            }キャッチ(例外e){
                System.out.printlnは( "日期格式不正确!")。
                e.printStackTrace();
            }
            戻り値の結果;
        }

        / **
         * HSSFCellに従ってデータの種類を設定します
         * @paramセル
         * @return
         * /
        プライベート文字列getCellFormatValue(HSSFCellセル){
            文字列CellValue = "";
            IF(セル= nullを!){
                //このセルはタイプ決定された
                スイッチ(セルを.getCellType()){
                    //数値に電流セルタイプ場合
                    ケースHSSFCell.CELL_TYPE_NUMERIC:
                    ケースHSSFCell.CELL_TYPE_FORMULAは:{
                        //現在のセルが日付であるか否かを判断する
                        IF(HSSFDateUtil.isCellDateFormatted(セル)){
                            日= DATEセル。 getDateCellValue();
                            =新規新しいSDFてSimpleDateFormatてSimpleDateFormat( "MM-DD-YYYY");
                            CellValue = sdf.format(DATE);
                        }
                        //数が純粋であれば
                        他{
                            //現在の値セル得る
                            cellvalue = String.valueOf(cell.getNumericCellValueを( ));
                        }
                        BREAK;
                    }
                    //現在のセルタイプがstrinされている場合
                    ケースHSSFCell.CELL_TYPE_STRINGを:
                        //現在のセルの文字列を取得します
                        。cellvalue = cell.getRichStringCellValue()のgetString( );
                        ブレーク;
                    //默认的值セル
                    デフォルト:
                        cellvalue = "「;
                }
            }他{
                cellvalue = "";
            }
            戻りcellvalue。

        }

        静的な無効メインパブリック(文字列[] args)を{
            試み{
                // Excelスプレッドシートのタイトルが読み取りテスト
                IS =のInputStream新新のFileInputStream( "D:\\ TEST2.XLS");
                ReadExcelUtil excelReader新しい新ReadExcelUtil =();
                String []型= excelReader.readExcelTitleタイトル(IS)
                のSystem.out.println( "見出しExcelのテーブル:");
                :{(タイトル文字列S)のために
                    、System.out.printの(S + "")
                }
                のSystem.out。 println();

                //エクセルのスプレッドシートコンテンツのテスト読み込むため
                のInputStream IS2 =新新のFileInputStream( "D:\\ TEST2.XLSを");
                地図<整数を、文字列> = excelReader.readExcelContent地図(IS2);
                System.out.printlnは(「取得エクセルフォームの内容:「);
                //ここでXLSは、細胞が特別な取り扱いインデックス必要と合併以来、
                (int型I = 2; I <= map.size()のために+ 1;私は++){。
                    のSystem.out.println(地図。 GET(I));
                }

            キャッチ}(FileNotFoundExceptionをE){
                System.out.printlnは( "パスを指定したファイルが見つかりませんでした!");
                E.printStackTrace();
            }
        }

}
 
--------------------- 

おすすめ

転載: www.cnblogs.com/hyhy904/p/10935211.html