パッケージ org.opengion.fukurou.model

## クラス ExcelModel

- java.lang.Object
- - org.opengion.fukurou.model.ExcelModel

-     public class ExcelModel
      extends java.lang.Object

  POI による、EXCELバイナリファイルに対する、データモデルクラスです。 共通的な EXCEL処理 を集約しています。 staticメソッドによる簡易的なアクセスの他に、順次処理も可能なように 現在アクセス中の、Workbook、Sheet、Row、Cell オブジェクトを内部で管理しています。 入力形式は、openXML形式にも対応しています。 ファイルの内容に応じて、.xlsと.xlsxのどちらで読み取るかは、内部的に 自動判定されます。
  機能分類
    その他
  変更履歴:
    6.0.2.0 (2014/09/19) 新規作成
  バージョン
    6.0
  作成者
    Kazuhiko Hasegawa
  導入されたバージョン:
    JDK7.0,

- - ### コンストラクタの概要

    コンストラクタ
    コンストラクタ | 説明
    --- | ---
    `ExcelModel​(java.io.File file)` | EXCELファイルのWookbookのデータ処理モデルを作成します。
    `ExcelModel​(java.io.File file, boolean isOpen)` | EXCELファイルのWookbookのデータ処理モデルを作成します。

  - ### メソッドの概要

    すべてのメソッド staticメソッド インスタンス・メソッド concreteメソッド
    修飾子とタイプ | メソッド | 説明
    --- | --- | ---
    `void` | `activeWorkbook​(boolean isCellDel)` | Workbook の全Sheetを対象に、空行を取り除き、全体をシュリンクします。
    `void` | `addImageFile​(java.lang.String imgFile, int shtNo, int rowNo, int colNo)` | 指定のシートの行・列の箇所に、イメージファイルを挿入します。
    `void` | `addImageFile​(java.lang.String imgFile, int shtNo, int row1, int col1, int row2, int col2, int dx1, int dy1, int dx2, int dy2)` | 指定のシートの行・列の箇所に、イメージファイルを挿入します。
    `void` | `createRow​(int rowNo)` | Excelの指定行のRowオブジェクトを作成します。
    `void` | `createSheet​(java.lang.String shtName, boolean isOverwrite)` | 内部 Workbookより、新しいSheetを作ります。
    `int` | `getFirstRowNum()` | 内部 Workbookの 現在Sheet の最初の行番号を返します。
    `int` | `getLastRowNum()` | 内部 Workbookの 現在Sheet の最後の行番号を返します。
    `java.lang.String[]` | `getNames()` | 名前定義一覧を内部の Workbook から取得します。
    `int` | `getNumberOfSheets()` | 内部 Workbookの Sheet数を返します。
    `java.lang.String` | `getSheetName​(int shtNo)` | 内部 Workbook の 指定のSheet番号のシート名前を返します。
    `java.lang.String[]` | `getSheetNames()` | シート一覧を、内部の Workbook から取得します。
    `int` | `getSheetNo​(java.lang.String shtName)` | 内部 Workbook の 指定のSheet名のシート番号を返します。
    `java.lang.String[]` | `getStyleNames()` | 書式のスタイル一覧を内部の Workbook から取得します。
    `java.lang.String` | `getValue​(int rowNo, int colNo)` | 現在のrow にあるセルの属性値を返します。
    `java.lang.String[]` | `getValues​(int rowNo)` | 現在のRow にあるセルの属性値を配列で返します。
    `static void` | `main​(java.lang.String[] args)` | アプリケーションのサンプルです。
    `void` | `removeCell​(int startCellNum)` | Excelの処理中のRowオブジェクトの指定カラム以降の余計なCellオブジェクトを削除します。
    `void` | `removeRow​(int startRowNum)` | Excelの指定行以降の余計なRowオブジェクトを削除します。
    `void` | `removeSheet​(int fromNo, int toNo)` | Excelの指定Sheetオブジェクトを削除します。
    `void` | `saveFile​(java.io.File file)` | 内部 Workbook オブジェクトをファイルに書き出します。
    `void` | `setAddTitleSheet​(java.lang.String shtName)` | Sheet一覧を先頭Sheetに作成する場合のSheet名を指定します。
    `void` | `setCellLink​(java.lang.String linkVal, int colNo)` | Excelの指定セルにHyperlinkを設定します。
    `void` | `setCellStyle()` | データ設定する セルに、罫線を追加します。
    `void` | `setCellValue​(java.lang.String dataVal, int colNo)` | Excelの指定セルにデータを設定します。
    `void` | `setCellValue​(java.lang.String dataVal, int colNo, boolean isNumber)` | Excelの指定セルにデータを設定します。
    `void` | `setDataStartRow​(int st)` | データ行の書き込み開始位置の行番号を設定します。
    `void` | `setFont​(java.lang.String fontName, short fontPoint)` | 内部 Workbook に、フォント名、フォントサイズを設定します。
    `void` | `setRecalcSheetName​(java.lang.String[] sheets)` | EXCELで、出力処理の最後にセルの計算式の再計算をさせるシート名の配列を指定します。
    `void` | `setRefSheetName​(java.lang.String refSheetName)` | 内部 Workbookより、雛形Sheetをセットします。
    `void` | `setSheetName​(int shtNo, java.lang.String shtName)` | 内部 Workbook の指定のシート番号の Sheet の名前を設定します。
    `void` | `setValues​(java.lang.String[] vals, int rowNo)` | row にあるセルのオブジェクト値を設定します。
    `void` | `setValues​(java.lang.String[] vals, int rowNo, boolean[] isNums)` | row にあるセルのオブジェクト値を設定します。
    `void` | `sheetCopy​(TextConverter<java.lang.String,​java.lang.String> conv, java.lang.String shtName)` | Workbook の雛形シートのTextConverter した、新しいSheetを作成します。
    `void` | `sheetSelected​(boolean isSelect)` | 現在のシートを選択済み(true)か、非選択済み(false)に設定します。
    `void` | `textConverter​(java.util.Map<java.lang.String,​java.lang.String> convMap)` | Workbook の全Sheetを対象に、テキスト変換処理を行います(XSLX限定)。
    `void` | `textConverter​(TextConverter<java.lang.String,​java.lang.String> conv)` | Workbook の全Sheetを対象に、テキスト変換処理を行います(XSLX限定)。
    `void` | `useAutoCellSize​(boolean flag)` | 全てのSheetに対して、autoSizeColumn設定を行うかどうか指定します(初期値:false)。
    `void` | `useAutoCellSize​(boolean flag, int count)` | 全てのSheetに対して、autoSizeColumn設定を行うかどうか指定します(初期値:false)。

    - ### クラスから継承されたメソッド java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### コンストラクタの詳細

    - #### ExcelModel

          public ExcelModel​(java.io.File file)

      EXCELファイルのWookbookのデータ処理モデルを作成します。 ここでは、既存のファイルを読み込んで、データ処理モデルを作成しますので、 ファイルがオープンできなければエラーになります。
      パラメータ:
        `file` - EXCELファイル
      関連項目:
        `ExcelModel( File , boolean )`
      変更履歴:
        6.0.2.0 (2014/09/19) 新規作成, 6.2.0.0 (2015/02/27) ファイル引数を、String → File に変更

    - #### ExcelModel

          public ExcelModel​(java.io.File file,
                            boolean isOpen)

      EXCELファイルのWookbookのデータ処理モデルを作成します。 isOpen条件によって、ファイルオープン(true)か、新規作成(false)が分かれます。 ファイルオープンの場合は、EXCELの読み込み以外に、追記するとか、雛形参照する 場合にも、使用します。 ファイルオープンの場合は、当然、ファイルがオープンできなければエラーになります。 isOpen=新規作成(false) の場合は、ファイル名の拡張子で、XSSFWorkbook か HSSFWorkbook を 判定します。.xlsx の場合⇒XSSFWorkbook オブジェクトを使用します。
      パラメータ:
        `file` - EXCELファイル
        `isOpen` - true:ファイルオープン/false:新規作成
      関連項目:
        `ExcelModel( File )`
      変更履歴:
        6.0.2.0 (2014/09/19) 新規作成, 6.0.2.3 (2014/10/10) POIUtil#createWorkbook( String ) を使用するように変更, 6.1.0.0 (2014/12/26) 入力ファイルの拡張子判定の対応, 6.2.0.0 (2015/02/27) ファイル引数を、String → File に変更, 6.2.2.0 (2015/03/27) マクロ付Excel(.xlsm)対応, 6.3.7.0 (2015/09/04),5.9.0.0 (2015/09/04) 標準を、SXSSFWorkbook に切り替えてみる。

  - ### メソッドの詳細

    - #### setFont

          public void setFont​(java.lang.String fontName,
                              short fontPoint)

      内部 Workbook に、フォント名、フォントサイズを設定します。 fontName(フォント名)は、"ＭＳ Ｐゴシック" など名称になります。 fontPoint は、フォントの大きさを指定します。 内部的には、setFontHeightInPoints(short)メソッドで設定します。
      パラメータ:
        `fontName` - フォント名 ("ＭＳ Ｐゴシック" など。nullの場合セットしません)
        `fontPoint` - フォントの大きさ (0やマイナスの場合はセットしません)
      変更履歴:
        6.0.2.0 (2014/09/19) 新規作成

    - #### setCellStyle

          public void setCellStyle()

      データ設定する セルに、罫線を追加します。 ここで設定するのは、罫線の種類と、罫線の色ですが、内部的に固定にしています。 Border=CellStyle.BORDER_THIN BorderColor=IndexedColors.BLACK
      変更履歴:
        6.0.2.0 (2014/09/19) 新規作成, 6.5.0.0 (2016/09/30) poi-3.15 対応(Cell.CELL_TYPE_XXXX → CellType.XXXX)

    - #### useAutoCellSize

          public void useAutoCellSize​(boolean flag)

      全てのSheetに対して、autoSizeColumn設定を行うかどうか指定します(初期値:false)。 autoSize設定で、カラム幅が大きすぎる場合、現状では、 初期カラム幅の５倍を限度にしています。 なお、autoSizeColumn設定は負荷の大きな処理なので、saveFile(String)の 中で実行されます。(セーブしなければ実行されません。) よって、指定は、いつ行っても構いません。
      パラメータ:
        `flag` - autoSizeColumn設定を行うかどうか [true:自動カラム幅設定を行う/false:行わない]
      関連項目:
        `useAutoCellSize( boolean,int )`
      変更履歴:
        6.0.2.0 (2014/09/19) 新規作成

    - #### useAutoCellSize

          public void useAutoCellSize​(boolean flag,
                                      int count)

      全てのSheetに対して、autoSizeColumn設定を行うかどうか指定します(初期値:false)。 autoSize設定で、カラム幅が大きすぎる場合、現状では、 初期カラム幅のcount倍を限度に設定します。 ただし、count がマイナスの場合は、無制限になります。 なお、autoSizeColumn設定は負荷の大きな処理なので、saveFile(String)の 中で実行されます。(セーブしなければ実行されません。) よって、指定は、いつ行っても構いません。
      パラメータ:
        `flag` - autoSizeColumn設定を行うかどうか [true:自動カラム幅設定を行う/false:行わない]
        `count` - 最大幅を標準セル幅の何倍にするかを指定。マイナスの場合は、無制限
      関連項目:
        `useAutoCellSize( boolean )`
      変更履歴:
        6.0.2.0 (2014/09/19) 新規作成

    - #### setRecalcSheetName

          public void setRecalcSheetName​(java.lang.String[] sheets)

      EXCELで、出力処理の最後にセルの計算式の再計算をさせるシート名の配列を指定します。 null の場合は、再計算しません。 なお、再計算は、saveFile(String)の中で実行されます。(セーブしなければ実行されません。)
      パラメータ:
        `sheets` - 対象シート名の配列
      変更履歴:
        6.5.0.0 (2016/09/30) セルの計算式の再計算をさせる recalcSheetNames 属性の追加。

    - #### setDataStartRow

          public void setDataStartRow​(int st)

      データ行の書き込み開始位置の行番号を設定します。 これは、autoSize設定で、自動調整するカラムを、ヘッダーではなく、 データ部で計算する場合に使用します。
      パラメータ:
        `st` - データ行の開始位置。未設定時は、-1
      関連項目:
        `useAutoCellSize( boolean )`
      変更履歴:
        6.0.2.0 (2014/09/19) 新規作成

    - #### setAddTitleSheet

          public void setAddTitleSheet​(java.lang.String shtName)

      Sheet一覧を先頭Sheetに作成する場合のSheet名を指定します。 これは、Workbook に含まれる Sheet 一覧を作成する場合に、利用可能です。 この処理は、#saveFile( File ) 処理時に、実行されます。
      パラメータ:
        `shtName` - Sheet一覧のSheet名
      関連項目:
        `makeAddTitleSheet()`
      変更履歴:
        6.0.2.0 (2014/09/19) 新規作成

    - #### getNumberOfSheets

          public int getNumberOfSheets()

      内部 Workbookの Sheet数を返します。
      戻り値:
        シート数
      変更履歴:
        6.0.2.0 (2014/09/19) 新規作成

    - #### setRefSheetName

          public void setRefSheetName​(java.lang.String refSheetName)

      内部 Workbookより、雛形Sheetをセットします。 これは、雛形シートを使用する場合に、使います。このメソッドが呼ばれると、 雛形シートを使用すると判定されます。 雛形シート名が、内部 Workbook に存在しない場合は、エラーになります。 ただし、null をセットした場合は、最初のシートを雛形シートとして使用すると 判定します。
      パラメータ:
        `refSheetName` - 参照シート名(nullの場合、参照シート使用する場合は、先頭のシート)
      変更履歴:
        6.0.2.0 (2014/09/19) 新規作成

    - #### createSheet

          public void createSheet​(java.lang.String shtName,
                                  boolean isOverwrite)

      内部 Workbookより、新しいSheetを作ります。 先に雛形シートを指定している場合は、その雛形シートから作成します。 指定していない場合は、新しいシートを作成します。 雛形シートを参照する場合は、雛形シートそのものを返します。 また、雛形シートの枚数を超える場合は、前の雛形シートをコピーします。 雛形シートが存在しない場合は、新しいシートを作成します。 シート名は、重複チェックを行い、同じ名前のシートの場合は、(1),(2)が付けられます。 shtName が null の場合は、"Sheet" が割り振られます。 この処理を行うと、内部の Sheet にも、ここで作成された Sheet が設定されます。
      パラメータ:
        `shtName` - シート名 (重複する場合は、(2)、(3)のような文字列を追加 、nullの場合は、"Sheet")
        `isOverwrite` - 雛形シート名をそのまま使用する場合は、true を指定します。
      変更履歴:
        6.0.2.0 (2014/09/19) 新規作成, 6.2.2.3 (2015/04/10) 雛形シートにそのままデータを書き込んでいく。, 6.5.0.0 (2016/09/30) 雛形シート名をそのまま使用する場合は、isOverwrite に、true を指定します。

    - #### setSheetName

          public void setSheetName​(int shtNo,
                                   java.lang.String shtName)

      内部 Workbook の指定のシート番号の Sheet の名前を設定します。 指定のシート名が、既存のシートになければ、そのまま設定します。 すでに、同じ名前のシートが存在する場合は、そのシート名の後に (1)、(2)、(3)のような文字列を追加します。 shtName が null の場合は、"Sheet" が割り振られます。
      パラメータ:
        `shtNo` - シート番号
        `shtName` - シート名 (重複する場合は、(1)、(2)のような文字列を追加 、nullの場合は、"Sheet")
      変更履歴:
        6.0.2.0 (2014/09/19) 新規作成, 6.2.5.1 (2015/06/12) シート名重複が自分自身の場合は、(1)等の追加は行わない。

    - #### getSheetName

          public java.lang.String getSheetName​(int shtNo)

      内部 Workbook の 指定のSheet番号のシート名前を返します。 シートが存在しない場合は、null を返します。 この処理を行うと、内部の Sheet にも、ここで見つけた Sheet が設定されます。
      パラメータ:
        `shtNo` - シート番号
      戻り値:
        shtName シート名
      変更履歴:
        6.0.2.0 (2014/09/19) 新規作成

    - #### getSheetNo

          public int getSheetNo​(java.lang.String shtName)

      内部 Workbook の 指定のSheet名のシート番号を返します。 シートが存在しない場合は、-1 を返します。 この処理を行うと、内部の Sheet にも、ここで見つけた Sheet が設定されます。 シートが存在しない場合、内部の Sheet オブジェクトも null がセットされますのでご注意ください。
      パラメータ:
        `shtName` - シート名
      戻り値:
        シート番号(名前のシートがなければ、-1)
      変更履歴:
        6.0.2.0 (2014/09/19) 新規作成

    - #### removeSheet

          public void removeSheet​(int fromNo,
                                  int toNo)

      Excelの指定Sheetオブジェクトを削除します。 削除するシートは、シート番号でFrom-To形式で指定します。 Fromも Toも、削除するシート番号を含みます。 例えば、0,3 と指定すると、0,1,2,3 の ４シート分を削除します。
      パラメータ:
        `fromNo` - 削除する開始シート番号(含む)
        `toNo` - 削除する終了シート番号(含む)
      変更履歴:
        6.0.2.0 (2014/09/19) 新規作成

    - #### getFirstRowNum

          public int getFirstRowNum()

      内部 Workbookの 現在Sheet の最初の行番号を返します。 行は、0 から始まります。 この処理は、内部Sheetが作成されているか、null でない場合のみ実行できます。
      戻り値:
        最初の行番号
      変更履歴:
        6.0.2.0 (2014/09/19) 新規作成

    - #### getLastRowNum

          public int getLastRowNum()

      内部 Workbookの 現在Sheet の最後の行番号を返します。 最終行は、含みます。よって、行数は、getLastRowNum()＋１になります。 この処理は、内部Sheetが作成されているか、null でない場合のみ実行できます。
      戻り値:
        最後の行番号
      変更履歴:
        6.0.2.0 (2014/09/19) 新規作成

    - #### createRow

          public void createRow​(int rowNo)

      Excelの指定行のRowオブジェクトを作成します。 指定行の Row オブジェクトが存在しない場合は、新規作成します。 この処理を実行すると、指定行の Rowオブジェクトが内部 Row に設定されます。 この処理は、内部Sheetが作成されているか、null でない場合のみ実行できます。 この処理を行うと、内部の Rowオブジェクトが設定されます。
      パラメータ:
        `rowNo` - 行の番号
      変更履歴:
        6.0.2.0 (2014/09/19) 新規作成

    - #### removeRow

          public void removeRow​(int startRowNum)

      Excelの指定行以降の余計なRowオブジェクトを削除します。 指定行の Row オブジェクトから、getLastRowNum() までの行を、削除します。 この処理は、内部Sheetが作成されているか、null でない場合のみ実行できます。
      パラメータ:
        `startRowNum` - 指定以降の余計な行を削除
      変更履歴:
        6.0.2.0 (2014/09/19) 新規作成

    - #### removeCell

          public void removeCell​(int startCellNum)

      Excelの処理中のRowオブジェクトの指定カラム以降の余計なCellオブジェクトを削除します。 指定行の Row オブジェクトから、getLastCellNum() までのカラムを、削除します。 この処理は、内部Rowが作成されているか、null でない場合のみ実行できます。
      パラメータ:
        `startCellNum` - 指定以降の余計なカラムを削除
      変更履歴:
        6.0.2.0 (2014/09/19) 新規作成

    - #### setValues

          public void setValues​(java.lang.String[] vals,
                                int rowNo)

      row にあるセルのオブジェクト値を設定します。 行が存在しない場合、行を追加します。 この処理を行うと、内部の Rowオブジェクトがなければ新規作成されます。
      パラメータ:
        `vals` - 新しい配列値。
        `rowNo` - 値が変更される行(無視されます)
      変更履歴:
        6.0.2.0 (2014/09/19) 新規作成

    - #### setValues

          public void setValues​(java.lang.String[] vals,
                                int rowNo,
                                boolean[] isNums)

      row にあるセルのオブジェクト値を設定します。 行が存在しない場合、行を追加します。 引数に、カラムがNUMBER型かどうかを指定することが出来ます。 この処理を行うと、内部の Rowオブジェクトがなければ新規作成されます。
      パラメータ:
        `vals` - 新しい配列値。
        `rowNo` - 値が変更される行(無視されます)
        `isNums` - セルが、NUMBER型の場合は、true/それ以外は、false
      変更履歴:
        6.0.2.0 (2014/09/19) 新規作成

    - #### setCellValue

          public void setCellValue​(java.lang.String dataVal,
                                   int colNo)

      Excelの指定セルにデータを設定します。 ここで設定する行は、現在の内部 Row です。 Row を切り替えたい場合は、#createRow( int ) を呼び出してください。 このメソッドでは、データを文字列型として設定します。 この処理は、内部Rowが作成されているか、null でない場合のみ実行できます。
      パラメータ:
        `dataVal` - String文字列
        `colNo` - セルの番号(0,1,2････)
      関連項目:
        `setCellValue( String,int,boolean )`
      変更履歴:
        6.0.2.0 (2014/09/19) 新規作成

    - #### setCellValue

          public void setCellValue​(java.lang.String dataVal,
                                   int colNo,
                                   boolean isNumber)

      Excelの指定セルにデータを設定します。 ここで設定する行は、現在の内部 Row です。 Row を切り替えたい場合は、#createRow( int ) を呼び出してください。 このメソッドでは、引数のデータ型をNUMBER型の場合は、doubleに変換して、 それ以外は文字列としてとして設定します。 この処理は、内部Rowが作成されているか、null でない場合のみ実行できます。
      パラメータ:
        `dataVal` - String文字列
        `colNo` - セルの番号(0,1,2････)
        `isNumber` - セルが、NUMBER型の場合は、true/それ以外は、false
      関連項目:
        `createRow( int )`, `setCellValue( String,int )`
      変更履歴:
        6.0.2.0 (2014/09/19) 新規作成

    - #### setCellLink

          public void setCellLink​(java.lang.String linkVal,
                                  int colNo)

      Excelの指定セルにHyperlinkを設定します。 ここで設定する行は、現在の内部 Row です。 Row を切り替えたい場合は、#createRow( int ) を呼び出してください。 このメソッドで設定するHyperlinkは、Sheetに対する LINK_DOCUMENT です。 先に、セルに対する値をセットしておいてください。 Hyperlinkは、文字に対して、下線 と 青字 のスタイル設定を行います。 Link文字列(シート名) が、null や ゼロ文字列の場合は、処理を行いません。
      パラメータ:
        `linkVal` - Link文字列(シート名)
        `colNo` - セルの番号(0,1,2････)
      関連項目:
        `setCellValue( String,int )`
      変更履歴:
        6.0.2.0 (2014/09/19) 新規作成, 6.5.0.0 (2016/09/30) poi-3.15 対応(Hyperlink.LINK_XXXX → HyperlinkType.XXXX)

    - #### getValues

          public java.lang.String[] getValues​(int rowNo)

      現在のRow にあるセルの属性値を配列で返します。 Rowオブジェクトが存在しない場合は、長さ０の配列を返します。 また、Rowオブジェクトの中の セルオブジェクトが存在しない場合は、 null がセットされます。 この処理は、内部Sheetが作成されているか、null でない場合のみ実行できます。 この処理を実行すると、指定行の Rowオブジェクトが内部 Row に設定されます。
      パラメータ:
        `rowNo` - 行の番号
      戻り値:
        指定されたセルの属性値。Rowがnullの場合は、長さ０の配列を返します。
      変更履歴:
        6.0.2.0 (2014/09/19) 新規作成, 6.3.9.0 (2015/11/06) ExcelModel#getValues(int) では、nullは返さない。, 6.3.9.1 (2015/11/27) メソッドの出口は、最後の１か所にすべきです(PMD)。
      このメソッドは、nullを返しません

    - #### getValue

          public java.lang.String getValue​(int rowNo,
                                           int colNo)

      現在のrow にあるセルの属性値を返します。 セルオブジェクトが存在しない場合は、null を返します。 この処理は、内部Sheetが作成されているか、null でない場合のみ実行できます。 この処理を実行すると、指定行の Rowオブジェクトが内部 Row に設定されます。
      パラメータ:
        `rowNo` - 値が参照される行
        `colNo` - 値が参照される列
      戻り値:
        指定されたセルの値 T
      変更履歴:
        6.0.2.0 (2014/09/19) 新規作成, 6.3.9.1 (2015/11/27) メソッドの出口は、最後の１か所にすべきです(PMD)。

    - #### addImageFile

          public void addImageFile​(java.lang.String imgFile,
                                   int shtNo,
                                   int rowNo,
                                   int colNo)

      指定のシートの行・列の箇所に、イメージファイルを挿入します。 ここでは、セル範囲ではなく、指定の行列の箇所に、アンカーを設定して、画像ファイルを 挿入します。一応、リサイズして、元の大きさ近くに戻しますが、縦横比が変わってしまいます。 正確に挿入する場合は、セル範囲の指定と、マージンを指定しなければなりませんが、 微調整が必要です。 この処理で使用される Sheetオブジェクトは一時的に作成されます。(キャッシュされません) 一連処理のどのタイミングで実行しても、内部の状態には影響はありません。
      パラメータ:
        `imgFile` - 挿入するイメージファイル名
        `shtNo` - シート番号
        `rowNo` - 挿入する行
        `colNo` - 挿入する列
      変更履歴:
        6.0.2.3 (2014/10/10) 新規作成

    - #### addImageFile

          public void addImageFile​(java.lang.String imgFile,
                                   int shtNo,
                                   int row1,
                                   int col1,
                                   int row2,
                                   int col2,
                                   int dx1,
                                   int dy1,
                                   int dx2,
                                   int dy2)

      指定のシートの行・列の箇所に、イメージファイルを挿入します。 ここでは、セル範囲ではなく、指定の行列の箇所に、アンカーを設定して、画像ファイルを 挿入します。一応、リサイズして、元の大きさ近くに戻しますが、縦横比が変わってしまいます。 正確に挿入する場合は、セル範囲の指定と、マージンを指定しなければなりませんが、 微調整が必要です。 この処理で使用される Sheetオブジェクトは一時的に作成されます。(キャッシュされません) 一連処理のどのタイミングで実行しても、内部の状態には影響はありません。
      パラメータ:
        `imgFile` - 挿入するイメージファイル名
        `shtNo` - シート番号
        `row1` - 挿入する行(開始)
        `col1` - 挿入する列(開始)
        `row2` - 挿入する行(終了-含まず)
        `col2` - 挿入する列(終了-含まず)
        `dx1` - 開始セルのX軸座標(マージン)
        `dy1` - 開始セルのY軸座標(マージン)
        `dx2` - 終了セルのX軸座標(マージン)
        `dy2` - 終了セルのY軸座標(マージン)
      変更履歴:
        6.0.2.3 (2014/10/10) 新規作成, 6.4.6.0 (2016/05/27) poi-3.15 準備, 6.8.2.4 (2017/11/20) poi-3.17 で、警告: [rawtypes] raw型が見つかりました対応

    - #### saveFile

          public void saveFile​(java.io.File file)

      内部 Workbook オブジェクトをファイルに書き出します。 Excelの形式は、ここで指定する出力ファイルの拡張子ではなく、コンストラクタで 指定したファイルの拡張子で決まります。 異なる形式の拡張子を持つファイルを指定した場合、強制的に、オープンした Workbook の形式の拡張子を追加します。 拡張子は、Excel 2007以降の形式(.xlsx)か、Excel 2003以前の形式(.xls) が指定できます。 拡張子が未設定の場合は、オープンした Workbook の形式に合わせた拡張子を付与します。 isAutoCellSize=true の場合は、ここで全Sheetに対してCell幅の自動調整が行われます。
      パラメータ:
        `file` - セーブするファイル
      変更履歴:
        6.0.2.0 (2014/09/19) 新規作成, 6.1.0.0 (2014/12/26) 入力ファイルの拡張子判定の対応, 6.2.0.0 (2015/02/27) ファイル引数を、String → File に変更, 6.5.0.0 (2016/09/30) セルの計算式の再計算をさせる recalcSheetNames 属性の追加。

    - #### activeWorkbook

          public void activeWorkbook​(boolean isCellDel)

      Workbook の全Sheetを対象に、空行を取り除き、全体をシュリンクします。 この処理は、#saveFile( File ) の直前に行うのがよいでしょう。 ここでは、Row を逆順にスキャンし、Cellが 存在しない間は、行を削除します。 途中の空行の削除ではなく、最終行からの連続した空行の削除です。 isCellDel=true を指定すると、Cellの末尾削除を行います。 有効行の最後のCellから空セルを削除していきます。 表形式などの場合は、Cellのあるなしで、レイアウトが崩れる場合がありますので 処理が不要な場合は、isCellDel=false を指定してください。
      パラメータ:
        `isCellDel` - Cellの末尾削除を行うかどうか(true:行う/false:行わない)
      変更履歴:
        6.0.2.0 (2014/09/19) 新規作成

    - #### textConverter

          public void textConverter​(java.util.Map<java.lang.String,​java.lang.String> convMap)

      Workbook の全Sheetを対象に、テキスト変換処理を行います(XSLX限定)。 この処理は、#saveFile( File ) の直前に行うのがよいでしょう。 #activeWorkbook( boolean ) との順番は構いません。 ・シート名の一覧をピックアップします。 ・セル値を、セル単位にピックアップします。 ・オブジェクト文字列を、改行単位にピックアップし、結果を合成します。 ここでは、内部的に、TextConverterインターフェースを作成して処理します。
      パラメータ:
        `convMap` - 変換対象を管理するMapオブジェクト
      関連項目:
        `textConverter( TextConverter )`
      変更履歴:
        6.2.4.2 (2015/05/29) テキスト変換処理, 6.3.1.0 (2015/06/28) TextConverterに、引数(cmnt)を追加, 6.3.9.0 (2015/11/06) Java 8 ラムダ式に変更

    - #### textConverter

          public void textConverter​(TextConverter<java.lang.String,​java.lang.String> conv)

      Workbook の全Sheetを対象に、テキスト変換処理を行います(XSLX限定)。 この処理は、#saveFile( File ) の直前に行うのがよいでしょう。 #activeWorkbook( boolean ) との順番は構いません。 ・シート名の一覧をピックアップします。 ・セル値を、セル単位内の改行単位にピックアップし、結果を合成ます。 ・オブジェクト文字列を、改行単位にピックアップし、結果を合成します。 ここでは、シート名、セルテキスト、SimpleShapeオブジェクトのテキストを input に、TextConverterインターフェース の change メソッドを呼び出します。 戻り値が、null でないなら、元のデータと置き換えます。 戻り値が、null の場合は、そのまま読み飛ばします。(なにもしません) EXCELへの書き戻しが発生しますので、万一、ファイル破損で、開けなくなる場合を 想定して、バックアップファイルは、各自で準備してください。
      パラメータ:
        `conv` - TextConverterインターフェース
      関連項目:
        `textConverter( Map )`
      変更履歴:
        6.2.4.2 (2015/05/29) テキスト変換処理, 6.2.5.0 (2015/06/05) xsl形式のオブジェクト取得…はできなかった。, 6.3.1.0 (2015/06/28) TextConverterに、引数(cmnt)を追加, 6.3.9.0 (2015/11/06) セルに値をセットするときに、セルタイプを考慮する。

    - #### sheetSelected

          public void sheetSelected​(boolean isSelect)

      現在のシートを選択済み(true)か、非選択済み(false)に設定します。 通常は、シートは、先頭シート以外は、非選択状態になっています。 シートを選択済みにすることで、印刷範囲を指定する事ができます。
      パラメータ:
        `isSelect` - true:シート選択/false:非選択
      変更履歴:
        6.3.9.0 (2015/11/06) 新規追加

    - #### sheetCopy

          public void sheetCopy​(TextConverter<java.lang.String,​java.lang.String> conv,
                                java.lang.String shtName)

      Workbook の雛形シートのTextConverter した、新しいSheetを作成します。 正確には、 １．雛形シートを、コピーして、新しいSheet(shtName)を、作成します。 ２．雛形シートが指定されていない場合は、一番最後のシートをコピーします。 ２．そのシートに対して、TextConverter を行い、文字列変換します。
      パラメータ:
        `conv` - TextConverterインターフェース
        `shtName` - シート名
      関連項目:
        `textConverter( Map )`
      変更履歴:
        6.3.9.0 (2015/11/06) 新規追加, 6.5.0.0 (2016/09/30) poi-3.15 対応(Cell.CELL_TYPE_XXXX → CellType.XXXX)

    - #### getSheetNames

          public java.lang.String[] getSheetNames()

      シート一覧を、内部の Workbook から取得します。 取得元が、Workbook なので、xls , xlsx どちらの形式でも取り出せます。 EXCEL上のシート名を、配列で返します。
      戻り値:
        シート名の配列
      関連項目:
        `POIUtil.getSheetNames( Workbook )`
      変更履歴:
        6.2.6.0 (2015/06/19) 新規作成

    - #### getNames

          public java.lang.String[] getNames()

      名前定義一覧を内部の Workbook から取得します。 EXCEL上に定義された名前を、配列で返します。 ここでは、名前とFormulaをタブで連結した文字列を配列で返します。 Name オブジェクトを削除すると、EXCELが開かなくなったりするので、 取りあえず一覧を作成して、手動で削除してください。 なお、名前定義には、非表示というのがありますので、ご注意ください。
      戻り値:
        名前定義(名前+TAB+Formula)の配列
      関連項目:
        `POIUtil.getNames( Workbook )`
      変更履歴:
        6.2.6.0 (2015/06/19) 新規作成
      このメソッドは、nullを返しません

    - #### getStyleNames

          public java.lang.String[] getStyleNames()

      書式のスタイル一覧を内部の Workbook から取得します。 EXCEL上に定義された書式のスタイルを、配列で返します。 書式のスタイルの名称は、CellStyle にメソッドが定義されていません。 実クラスである HSSFCellStyle にキャストして使用する 必要があります。(XSSFCellStyle にも名称を取得するメソッドがありません。) ※ EXCEL2010 ホームタブ→セルのスタイル は、一つづつしか削除できません。 マクロは、開発タブ→Visual Basic で、挿入→標準モジュール を開き テキストを張り付けてください。 実行は、開発タブ→マクロ で、マクロ名を選択して、実行します。 最後は、削除してください。
      戻り値:
        書式のスタイル一覧
      関連項目:
        `POIUtil.getStyleNames( Workbook )`
      変更履歴:
        6.2.6.0 (2015/06/19) 新規作成
      このメソッドは、nullを返しません

    - #### main

          public static void main​(java.lang.String[] args)

      アプリケーションのサンプルです。 Usage: java org.opengion.fukurou.model.ExcelModel 入力ファイル名 [出力ファイル名] ・・・ 通常は標準出力に行単位に、セルをタブ区切り出力します。 出力ファイル名 を指定すると、EXCEL ファイルとしてセーブし直します。 その場合は、以下のパラメータも使用できます。 -CS CellStyleを 設定します。 -AS useAutoCellSizeを 設定します。 -FN=*** FontNameを 設定します。 -FP=** FontPointを 設定します。 -IMG 画像ファイルを挿入します。(-IMG 画像ファイル名 シート番号 行 列)をスペース区切りで続けます。
      パラメータ:
        `args` - コマンド引数配列
      変更履歴:
        6.0.2.0 (2014/09/19) 新規作成