// Path: src/main/java/org/bbreak/excella/reports/tag/RemoveParamParser.java
// public class RemoveParamParser extends ReportsTagParser<Object> {
// 
//     /**
//      * デフォルトタグ
//      */
//     public static final String DEFAULT_TAG = "$REMOVE";
// 
//     /**
//      * コンストラクタ
//      */
//     public RemoveParamParser() {
//         super( DEFAULT_TAG);
//     }
// 
//     /**
//      * コンストラクタ
//      * 
//      * @param tag タグ
//      */
//     public RemoveParamParser( String tag) {
//         super( tag);
//     }
// 
//     @Override
//     public ParsedReportInfo parse( Sheet sheet, Cell tagCell, Object data) throws ParseException {
//         // 解析結果の生成
//         ParsedReportInfo parsedReportInfo = new ParsedReportInfo();
//         parsedReportInfo.setRowIndex( tagCell.getRowIndex());
//         parsedReportInfo.setColumnIndex( tagCell.getColumnIndex());
//         parsedReportInfo.setDefaultRowIndex( tagCell.getRowIndex());
//         parsedReportInfo.setDefaultColumnIndex( tagCell.getColumnIndex());
//         return parsedReportInfo;
//     }
// 
//     @Override
//     public boolean useControlRow() {
//         return false;
//     }
// 
// }
// 
// Path: src/main/java/org/bbreak/excella/reports/tag/ReportsTagParser.java
// public abstract class ReportsTagParser<T> extends TagParser<ParsedReportInfo> {
// 
//     /*
//      * (non-Javadoc)
//      * 
//      * @see org.bbreak.excella.core.tag.TagParser#parse(org.apache.poi.ss.usermodel.Sheet, org.apache.poi.ss.usermodel.Cell, java.lang.Object)
//      */
//     @Override
//     public abstract ParsedReportInfo parse( Sheet sheet, Cell tagCell, Object data) throws ParseException;
// 
//     /**
//      * コンストラクタ
//      * 
//      * @param tag タグ
//      */
//     public ReportsTagParser( String tag) {
//         super( tag);
//     }
// 
//     /**
//      * タグを制御行として扱うか否かを取得する。
//      * 
//      * @return true:制御行として削除／false:置換
//      */
//     public abstract boolean useControlRow();
// 
//     /**
//      * パラメータ情報よりパラメータ名で格納されている値を取得する。
//      * 
//      * @param paramInfo パラメータ情報
//      * @param paramName パラメータ名
//      * @return 置換する値
//      */
//     @SuppressWarnings( "unchecked")
//     public T getParamData( ParamInfo paramInfo, String paramName) {
//         if ( paramInfo == null || paramName == null) {
//             return null;
//         }
//         return ( T) paramInfo.getParam( getTag(), paramName);
//     }
// 
// }


import org.bbreak.excella.core.tag.TagParser;
import org.bbreak.excella.core.util.PoiUtil;
import org.bbreak.excella.core.util.TagUtil;
import org.bbreak.excella.reports.tag.RemoveParamParser;
import org.bbreak.excella.reports.tag.ReportsTagParser;
import java.util.List;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddress;
import org.bbreak.excella.core.SheetData;
import org.bbreak.excella.core.SheetParser;
import org.bbreak.excella.core.exception.ParseException;
                    continue;
                }
            }

            if ( removeColNum != -1) {
                if ( region.getFirstColumn() > removeColNum || removeColNum > region.getLastColumn()) {
                    continue;
                }
            }
            // 引数の結合INDEXに該当する結合を解除する
            sheet.removeMergedRegion( i);
            return;
        }
    }

    /**
     * 制御行の有無を返す。
     * 
     * @param sheet
     * @param sheetParser
     * @param row
     * @return
     */
    private boolean isControlRow( Sheet sheet, SheetParser sheetParser, Row row, Cell cell) {

        List<TagParser<?>> parsers = sheetParser.getTagParsers();

        for ( TagParser<?> parser : parsers) {
            try {
                if ( parser.isParse( sheet, cell)) {
// Path: src/main/java/org/bbreak/excella/reports/tag/RemoveParamParser.java
// public class RemoveParamParser extends ReportsTagParser<Object> {
// 
//     /**
//      * デフォルトタグ
//      */
//     public static final String DEFAULT_TAG = "$REMOVE";
// 
//     /**
//      * コンストラクタ
//      */
//     public RemoveParamParser() {
//         super( DEFAULT_TAG);
//     }
// 
//     /**
//      * コンストラクタ
//      * 
//      * @param tag タグ
//      */
//     public RemoveParamParser( String tag) {
//         super( tag);
//     }
// 
//     @Override
//     public ParsedReportInfo parse( Sheet sheet, Cell tagCell, Object data) throws ParseException {
//         // 解析結果の生成
//         ParsedReportInfo parsedReportInfo = new ParsedReportInfo();
//         parsedReportInfo.setRowIndex( tagCell.getRowIndex());
//         parsedReportInfo.setColumnIndex( tagCell.getColumnIndex());
//         parsedReportInfo.setDefaultRowIndex( tagCell.getRowIndex());
//         parsedReportInfo.setDefaultColumnIndex( tagCell.getColumnIndex());
//         return parsedReportInfo;
//     }
// 
//     @Override
//     public boolean useControlRow() {
//         return false;
//     }
// 
// }
// 
// Path: src/main/java/org/bbreak/excella/reports/tag/ReportsTagParser.java
// public abstract class ReportsTagParser<T> extends TagParser<ParsedReportInfo> {
// 
//     /*
//      * (non-Javadoc)
//      * 
//      * @see org.bbreak.excella.core.tag.TagParser#parse(org.apache.poi.ss.usermodel.Sheet, org.apache.poi.ss.usermodel.Cell, java.lang.Object)
//      */
//     @Override
//     public abstract ParsedReportInfo parse( Sheet sheet, Cell tagCell, Object data) throws ParseException;
// 
//     /**
//      * コンストラクタ
//      * 
//      * @param tag タグ
//      */
//     public ReportsTagParser( String tag) {
//         super( tag);
//     }
// 
//     /**
//      * タグを制御行として扱うか否かを取得する。
//      * 
//      * @return true:制御行として削除／false:置換
//      */
//     public abstract boolean useControlRow();
// 
//     /**
//      * パラメータ情報よりパラメータ名で格納されている値を取得する。
//      * 
//      * @param paramInfo パラメータ情報
//      * @param paramName パラメータ名
//      * @return 置換する値
//      */
//     @SuppressWarnings( "unchecked")
//     public T getParamData( ParamInfo paramInfo, String paramName) {
//         if ( paramInfo == null || paramName == null) {
//             return null;
//         }
//         return ( T) paramInfo.getParam( getTag(), paramName);
//     }
// 
// }


// Path: src/main/java/org/bbreak/excella/reports/listener/RemoveAdapter.java
import org.bbreak.excella.core.tag.TagParser;
import org.bbreak.excella.core.util.PoiUtil;
import org.bbreak.excella.core.util.TagUtil;
import org.bbreak.excella.reports.tag.RemoveParamParser;
import org.bbreak.excella.reports.tag.ReportsTagParser;
import java.util.List;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddress;
import org.bbreak.excella.core.SheetData;
import org.bbreak.excella.core.SheetParser;
import org.bbreak.excella.core.exception.ParseException;

                    continue;
                }
            }

            if ( removeColNum != -1) {
                if ( region.getFirstColumn() > removeColNum || removeColNum > region.getLastColumn()) {
                    continue;
                }
            }
            // 引数の結合INDEXに該当する結合を解除する
            sheet.removeMergedRegion( i);
            return;
        }
    }

    /**
     * 制御行の有無を返す。
     * 
     * @param sheet
     * @param sheetParser
     * @param row
     * @return
     */
    private boolean isControlRow( Sheet sheet, SheetParser sheetParser, Row row, Cell cell) {

        List<TagParser<?>> parsers = sheetParser.getTagParsers();

        for ( TagParser<?> parser : parsers) {
            try {
                if ( parser.isParse( sheet, cell)) {
                    if ( parser instanceof ReportsTagParser) {