    001/*
    002 * Copyright (c) 2009 The openGion Project.
    003 *
    004 * Licensed under the Apache License, Version 2.0 (the "License");
    005 * you may not use this file except in compliance with the License.
    006 * You may obtain a copy of the License at
    007 *
    008 *     http://www.apache.org/licenses/LICENSE-2.0
    009 *
    010 * Unless required by applicable law or agreed to in writing, software
    011 * distributed under the License is distributed on an "AS IS" BASIS,
    012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
    013 * either express or implied. See the License for the specific language
    014 * governing permissions and limitations under the License.
    015 */
    016package org.opengion.plugin.io;
    017
    018import org.apache.poi.ss.usermodel.Cell;
    019import org.apache.poi.ss.usermodel.Row;
    020import org.apache.poi.ss.usermodel.Sheet;
    021import org.apache.poi.ss.usermodel.Workbook;
    022
    023/**
    024 * POI による、EXCELバイナリファイルに対する、ユーティリティクラスです。
    025 *
    026 * ここでは、アクティブセル領域になるように、不要なセルや行を削除します。
    027 *
    028 * 入力形式は、openXML形式にも対応しています。
    029 * ファイルの内容に応じて、.xlsと.xlsxのどちらで読み取るかは、内部的に
    030 * 自動判定されます。
    031 *
    032 * @og.rev 5.5.7.2 (2012/10/09) 新規作成
    033 * @og.group その他
    034 *
    035 * @version  4.0
    036 * @author   Kazuhiko Hasegawa
    037 * @since    JDK5.0,
    038 */
    039public final class ExcelUtil {
    040        //* このプログラムのVERSION文字列を設定します。   {@value} */
    041        private static final String VERSION = "5.5.7.2 (2012/10/09)" ;
    042
    043        /**
    044         * オブジェクトを作らせない為の、private コンストラクタ
    045         */
    046        private ExcelUtil() {}
    047
    048        /**
    049         * DBTableModel から 各形式のデータを作成して,BufferedReader より読み取ります。
    050         * コメント/空行を除き、最初の行は、必ず項目名が必要です。
    051         * それ以降は、コメント/空行を除き、データとして読み込んでいきます。
    052         * このメソッドは、EXCEL 読み込み時に使用します。
    053         *
    054         * @og.rev 5.5.7.2 (2012/10/09) 新規追加
    055         *
    056         * @param       wb      処理対象のワークブック
    057         * @return      アクティブ領域のみに再設定された、ワークブック
    058         */
    059        public static Workbook activeWorkbook( final Workbook wb ) {
    060                int sheetSu = wb.getNumberOfSheets();
    061                for( int shno = 0; shno<sheetSu; shno++ ) {
    062                        Sheet sheet = wb.getSheetAt(shno);
    063
    064                        int nFirstRow = sheet.getFirstRowNum();
    065                        int nLastRow  = sheet.getLastRowNum();
    066
    067                        for( int nIndexRow = nFirstRow; nIndexRow <= nLastRow; nIndexRow++) {
    068                                Row oRow = sheet.getRow(nIndexRow);
    069                                if( oRow != null ) {
    070                                        boolean isAllBrank = true;
    071                                        int nFirstCell = oRow.getFirstCellNum();
    072                                        int nLastCell  = oRow.getLastCellNum();
    073                                        for( int nIndexCell = nFirstCell; nIndexCell <= nLastCell; nIndexCell++) {
    074                                                Cell oCell = oRow.getCell(nIndexCell);
    075                                                if( oCell != null && oCell.getCellType() != Cell.CELL_TYPE_BLANK ) {
    076                                                        isAllBrank = false;
    077                                                        break;
    078                                                }
    079                                        }
    080                                        if( isAllBrank ) { sheet.removeRow( oRow ); }
    081                                }
    082                        }
    083                }
    084                return wb ;
    085        }
    086}