Java对Excel的读取操作

来源:互联网 发布:linux 关闭tomcat命令 编辑:程序博客网 时间:2024/06/01 13:54

  因为工作用到java操作Excel,今天在实际开发前作了一个小的dome,对于2003格式的Excel的操作用的是jxl.jar包。对于2007格式的Excel用的是poi-examples-3.7-20101029.jar,poi-3.7-20101029.jar,poi-ooxml-3.7-20101029.jar,poi-ooxml-schemas-3.7-20101029.jar,poi-scratchpad-3.7-20101029.jar,dom4j-1.6.1.jar,geronimo-stax-api_1.0_spec-1.0.jar,xmlbeans-2.3.0.jar等包

    /**
     * @param args
     */
    public static void main(String[] args) {
         // EXCELのパスにより、データを取得して
        File file = new File("D:/11111.xlsx");
        // File file1 = new File("D:/var/am/ANONYMOUS/tmp/test_null_20120112.xls");
        // ReadExcels(file1, 1);
        // readExcelData(file);
        readExcelData2(file);
    }

 

  以下是对03格式的操作

 /**
     *
     * EXCELを読む
     * @param file ファイル流
     * @param sheetNum どのシートを読むか
     */
    public static List<Object> ReadExcels(File file, int sheetNum) {
        // 戻り値
        List<Object> listData = new ArrayList<Object>();

        //ファイル流を作成し、EXCELファイルを読み
        try {
            InputStream is = new FileInputStream(file.getAbsolutePath());
            Workbook wb = Workbook.getWorkbook(is);
            // パラメータsheetNumによりどのシートがことにします。
            Sheet sheet = wb.getSheet(sheetNum);

            // シート①を読み場合
            if (sheetNum == 0) {

            }

            // シート②を読み場合
            if (sheetNum == 1){
                // ヘッダ部で格納するデータ用
                Map<String, String> headMap = new HashMap<String, String>();

                // ヘッダ部用キーで
                String headkey;

                // ヘッダ部用値で
                String headValue;

                // 期計(ヘッダ用で)
                int syukeiHeadFlag = 1;

                // タイトル名
                String titleNm = "";

                // ヘッダ部を読み
                // シートのカラムのカウンタ
                for (int i = 5; i < sheet.getColumns(); i++) {
                    // ヘッダ部には四つのカラムがあります。
                    for (int j = 0; j < 4; j++) {
                        // キーを取得する
                        if (StringUtils.equals(sheet.getCell(8, 5+ i).getContents(), "期計")) {
                            syukeiHeadFlag ++;
                            titleNm = sheet.getCell(8, 5+ i).getContents() + "_" + String.valueOf(syukeiHeadFlag);
                        } else {
                            titleNm = sheet.getCell(8, 5+ i).getContents();
                        }
                        headkey = sheet.getCell(9 + j, 4).getContents()
                                  + titleNm;

                        // 値を取得する
                        headValue = sheet.getCell(9 + j, 5+ i).getContents();

                        // マップにキーと値を格納する
                        headMap.put(headkey, headValue);
                    }
                }

                // 明細部で格納するデータ用
                Map<String, String> detailMap = new HashMap<String, String>();
                List<Map<String, String>> listDetailMap = new ArrayList<Map<String, String>>();

                // 明細部用キーで
                String detailkey;

                // 明細部用値で
                String detailValue;

                // 期計(明細用で)
                int syukeiDetalFlag = 1;

                int whileflag = 15;
                while (whileflag <= sheet.getRows()) {
                     syukeiDetalFlag = 1;
                     if (StringUtils.equals("", sheet.getCell(whileflag, 4).getContents())) {
                         for (int i = 0; i < sheet.getColumns(); i++) {
                             if (i != 4) {
                                 detailMap = new HashMap<String, String>();
                                 // キーを取得する
                                 if (StringUtils.equals(sheet.getCell(whileflag - 1, i).getContents(), "期計")) {
                                     syukeiDetalFlag ++;
                                     detailkey = "期計" + "_" + String.valueOf(syukeiDetalFlag);
                                 } else {
                                     detailkey = sheet.getCell(whileflag - 1, i).getContents();
                                 }
                                  // 値を取得する
                                 detailValue = sheet.getCell(whileflag, i).getContents();

                                 // マップにキーと値を格納する
                                 detailMap.put(detailkey, detailValue);
                             }
                         }

                         // リストにマップを格納する
                         listDetailMap.add(detailMap);

                         // ループフラグとするカウント
                         whileflag++;
                     } else {
                         syukeiDetalFlag = 1;
                         for (int i = 0; i < sheet.getColumns(); i++) {
                             detailMap = new HashMap<String, String>();
                             for (int j = 0; j < 4; j ++) {
                                 if (j == 0) {
                                     if (i != 4) {
                                         // キーを取得する
                                         if (StringUtils.equals(sheet.getCell(whileflag - 1, i).getContents(), "期計")) {
                                             syukeiDetalFlag ++;
                                             detailkey = "期計" + "_" + String.valueOf(syukeiDetalFlag);
                                         } else {
                                             detailkey = sheet.getCell(whileflag - 1, i).getContents();
                                         }
                                          // 値を取得する
                                         detailValue = sheet.getCell(whileflag, i).getContents();

                                         // マップにキーと値を格納する
                                         detailMap.put(detailkey, detailValue);
                                     }
                                 } else {
                                     // キーを取得する
                                     if (StringUtils.equals(sheet.getCell(whileflag - 1, i).getContents(), "期計")) {
                                         syukeiDetalFlag ++;
                                         detailkey = "期計" + "_" + String.valueOf(syukeiDetalFlag);
                                     } else {
                                         detailkey = sheet.getCell(whileflag - 1, i).getContents();
                                     }
                                      // 値を取得する
                                     detailValue = sheet.getCell(whileflag, 5).getContents();

                                     // マップにキーと値を格納する
                                     detailMap.put(detailkey, detailValue);
                                 }
                                 // ループフラグとするカウント
                                 whileflag++;
                             }
                         }

                         // リストにマップを格納する
                         listDetailMap.add(detailMap);
                     }
                }
                // ヘッダ部のデータを取得する
                listData.add(headMap);

                // 明細部のデータを取得する
                listData.add(listDetailMap);
            }
        } catch (FileNotFoundException e) {
            // TODO 自動生成された catch ブロック
            e.printStackTrace();
        } catch (BiffException e) {
            // TODO 自動生成された catch ブロック
            e.printStackTrace();
        } catch (IOException e) {
            // TODO 自動生成された catch ブロック
            e.printStackTrace();
        }
        return listData;
    }

 

  以下是对07格式的操作

   /**
     * 拡張名は「xlsx」のファイルを取得する
     * @param file ファイルオブジェクト
     */
    public static void readExcelData2(File file) {
        try {
            // EXCELファイル対象を取得する
            XSSFWorkbook xwb = new XSSFWorkbook(file.getAbsolutePath());

            // EXCELの中の行オブジェクトを宣言します。
            XSSFRow row;

            // カラムのデータを取得する用で格納するオブジェクト
            String strKaramu;

            // 総シート数を取得する
            int sheet_size = xwb.getNumberOfSheets();

            // 全部なシートをループにしています。
            for (int sheetindex = 0; sheetindex < sheet_size; sheetindex++) {

                // EXCELにシートの対象を取得する
                XSSFSheet sheet = xwb.getSheetAt(sheetindex);

                //
                System.out.println("シート" + String.valueOf(sheetindex + 1));

                // 該当のシートの行数によりループにします。
                for (int i = sheet.getFirstRowNum(); i < sheet.getPhysicalNumberOfRows(); i++) {

                    // i行のデータを取得する
                    row = sheet.getRow(i);

                    // 該当のシートのカラム数によりループにします。
                    for (int j = row.getFirstCellNum(); j < row.getPhysicalNumberOfCells(); j++) {

                       //cellString中存的是读取出来的那个单元格中的内容
                        strKaramu = row.getCell(j).toString();

                       System.out.println(strKaramu);
                    }
                 }
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

 

 

 

原创粉丝点击