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

# クラス ExcelModel

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

public class ExcelModel extends Object
POI による､EXCELﾊﾞｲﾅﾘﾌｧｲﾙに対する､ﾃﾞｰﾀﾓﾃﾞﾙｸﾗｽです｡ 共通的な EXCEL処理 を集約しています｡ staticﾒｿｯﾄﾞによる簡易的なｱｸｾｽの他に､順次処理も可能なように 現在ｱｸｾｽ中の､Workbook､Sheet､Row､Cell ｵﾌﾞｼﾞｪｸﾄを内部で管理しています｡ 入力形式は､openXML形式にも対応しています｡ ﾌｧｲﾙの内容に応じて､.xlsと.xlsxのどちらで読み取るかは､内部的に 自動判定されます｡

変更履歴:
  6.0.2.0 (2014/09/19) 新規作成
機能分類
  その他
導入されたバージョン:
  JDK7.0,

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

  コンストラクタ
  コンストラクタ
  説明
  `ExcelModel(File file)`
  EXCELﾌｧｲﾙのWookbookのﾃﾞｰﾀ処理ﾓﾃﾞﾙを作成します｡ ここでは､既存のﾌｧｲﾙを読み込んで､ﾃﾞｰﾀ処理ﾓﾃﾞﾙを作成しますので､ ﾌｧｲﾙがｵｰﾌﾟﾝできなければｴﾗｰになります｡
  `ExcelModel(File file, boolean isOpen)`
  EXCELﾌｧｲﾙのWookbookのﾃﾞｰﾀ処理ﾓﾃﾞﾙを作成します｡ isOpen条件によって､ﾌｧｲﾙｵｰﾌﾟﾝ(true)か､新規作成(false)が分かれます｡ ﾌｧｲﾙｵｰﾌﾟﾝの場合は､EXCELの読み込み以外に､追記するとか､雛形参照する 場合にも､使用します｡ ﾌｧｲﾙｵｰﾌﾟﾝの場合は､当然､ﾌｧｲﾙがｵｰﾌﾟﾝできなければｴﾗｰになります｡ isOpen=新規作成(false) の場合は､ﾌｧｲﾙ名の拡張子で､XSSFWorkbook か HSSFWorkbook を 判定します｡.xlsx の場合⇒XSSFWorkbook ｵﾌﾞｼﾞｪｸﾄを使用します｡

- ## メソッドの概要

  修飾子とタイプ
  メソッド
  説明
  `void`
  `activeWorkbook(boolean isCellDel)`
  Workbook の全Sheetを対象に､空行を取り除き､全体をｼｭﾘﾝｸします｡ この処理は､#saveFile( File ) の直前に行うのがよいでしょう｡ ここでは､Row を逆順にｽｷｬﾝし､Cellが 存在しない間は､行を削除します｡ 途中の空行の削除ではなく､最終行からの連続した空行の削除です｡ isCellDel=true を指定すると､Cellの末尾削除を行います｡ 有効行の最後のCellから空ｾﾙを削除していきます｡ 表形式などの場合は､Cellのあるなしで､ﾚｲｱｳﾄが崩れる場合がありますので 処理が不要な場合は､isCellDel=false を指定してください｡
  `void`
  `activeWorkbook(List<Integer> rowCntList)`
  指定の Workbook の全Sheetを対象に､実際の有効行と有効ｶﾗﾑを元に全体をｼｭﾘﾝｸします｡ ※ 現在､唯一LibreOfficeでのみ､xslx 変換できますが､有効行とｶﾗﾑが ｼｭﾘﾝｸされず､無駄な行とｶﾗﾑが存在します｡ これは､xsl で出力されたﾌｧｲﾙから有効な値を取得して､xslxに適用させるための 機能で､本来きちんとした有効範囲の xslx が生成されれば､不要な処理です｡ 引数のListｵﾌﾞｼﾞｪｸﾄに従って､無条件に処理を行います｡
  `void`
  `addImageFile(String imgFile, int shtNo, int rowNo, int colNo)`
  指定のｼｰﾄの行･列の箇所に､ｲﾒｰｼﾞﾌｧｲﾙを挿入します｡ ここでは､ｾﾙ範囲ではなく､指定の行列の箇所に､ｱﾝｶｰを設定して､画像ﾌｧｲﾙを 挿入します｡一応､ﾘｻｲｽﾞして､元の大きさ近くに戻しますが､縦横比が変わってしまいます｡ 正確に挿入する場合は､ｾﾙ範囲の指定と､ﾏｰｼﾞﾝを指定しなければなりませんが､ 微調整が必要です｡ この処理で使用される Sheetｵﾌﾞｼﾞｪｸﾄは一時的に作成されます｡(ｷｬｯｼｭされません) 一連処理のどのﾀｲﾐﾝｸﾞで実行しても､内部の状態には影響はありません｡
  `void`
  `addImageFile(String imgFile, int shtNo, int row1, int col1, int row2, int col2, int dx1, int dy1, int dx2, int dy2)`
  指定のｼｰﾄの行･列の箇所に､ｲﾒｰｼﾞﾌｧｲﾙを挿入します｡ ここでは､ｾﾙ範囲ではなく､指定の行列の箇所に､ｱﾝｶｰを設定して､画像ﾌｧｲﾙを 挿入します｡一応､ﾘｻｲｽﾞして､元の大きさ近くに戻しますが､縦横比が変わってしまいます｡ 正確に挿入する場合は､ｾﾙ範囲の指定と､ﾏｰｼﾞﾝを指定しなければなりませんが､ 微調整が必要です｡ この処理で使用される Sheetｵﾌﾞｼﾞｪｸﾄは一時的に作成されます｡(ｷｬｯｼｭされません) 一連処理のどのﾀｲﾐﾝｸﾞで実行しても､内部の状態には影響はありません｡
  `void`
  `createRow(int rowNo)`
  Excelの指定行のRowｵﾌﾞｼﾞｪｸﾄを作成します｡ 指定行の Row ｵﾌﾞｼﾞｪｸﾄが存在しない場合は､新規作成します｡ この処理を実行すると､指定行の Rowｵﾌﾞｼﾞｪｸﾄが内部 Row に設定されます｡ この処理は､内部Sheetが作成されているか､null でない場合のみ実行できます｡ この処理を行うと､内部の Rowｵﾌﾞｼﾞｪｸﾄが設定されます｡
  `void`
  `createSheet(String shtName, boolean isOverwrite)`
  内部 Workbookより､新しいSheetを作ります｡ 先に雛形ｼｰﾄを指定している場合は､その雛形ｼｰﾄから作成します｡ 指定していない場合は､新しいｼｰﾄを作成します｡ 雛形ｼｰﾄを参照する場合は､雛形ｼｰﾄそのものを返します｡ また､雛形ｼｰﾄの枚数を超える場合は､前の雛形ｼｰﾄをｺﾋﾟｰします｡ 雛形ｼｰﾄが存在しない場合は､新しいｼｰﾄを作成します｡ ｼｰﾄ名は､重複ﾁｪｯｸを行い､同じ名前のｼｰﾄの場合は､(1),(2)が付けられます｡ shtName が null の場合は､"Sheet" が割り振られます｡ この処理を行うと､内部の Sheet にも､ここで作成された Sheet が設定されます｡
  `int`
  `getFirstRowNum()`
  内部 Workbookの 現在Sheet の最初の行番号を返します｡ 行は､0 から始まります｡ この処理は､内部Sheetが作成されているか､null でない場合のみ実行できます｡
  `int`
  `getLastRowNum()`
  内部 Workbookの 現在Sheet の最後の行番号を返します｡ 最終行は､含みます｡よって､行数は､getLastRowNum()＋１になります｡ この処理は､内部Sheetが作成されているか､null でない場合のみ実行できます｡
  `String[]`
  `getNames()`
  名前定義一覧を内部の Workbook から取得します｡ EXCEL上に定義された名前を､配列で返します｡ ここでは､名前とFormulaをﾀﾌﾞで連結した文字列を配列で返します｡ Name ｵﾌﾞｼﾞｪｸﾄを削除すると､EXCELが開かなくなったりするので､ 取りあえず一覧を作成して､手動で削除してください｡ なお､名前定義には､非表示というのがありますので､ご注意ください｡
  `int`
  `getNumberOfSheets()`
  内部 Workbookの Sheet数を返します｡
  `String`
  `getSheetName(int shtNo)`
  内部 Workbook の 指定のSheet番号のｼｰﾄ名前を返します｡ ｼｰﾄが存在しない場合は､null を返します｡ この処理を行うと､内部の Sheet にも､ここで見つけた Sheet が設定されます｡
  `String[]`
  `getSheetNames()`
  ｼｰﾄ一覧を､内部の Workbook から取得します｡ 取得元が､Workbook なので､xls , xlsx どちらの形式でも取り出せます｡ EXCEL上のｼｰﾄ名を､配列で返します｡
  `int`
  `getSheetNo(String shtName)`
  内部 Workbook の 指定のSheet名のｼｰﾄ番号を返します｡ ｼｰﾄが存在しない場合は､-1 を返します｡ この処理を行うと､内部の Sheet にも､ここで見つけた Sheet が設定されます｡ ｼｰﾄが存在しない場合､内部の Sheet ｵﾌﾞｼﾞｪｸﾄも null がｾｯﾄされますのでご注意ください｡
  `String[]`
  `getStyleNames()`
  書式のｽﾀｲﾙ一覧を内部の Workbook から取得します｡ EXCEL上に定義された書式のｽﾀｲﾙを､配列で返します｡ 書式のｽﾀｲﾙの名称は､CellStyle にﾒｿｯﾄﾞが定義されていません｡ 実ｸﾗｽである HSSFCellStyle にｷｬｽﾄして使用する 必要があります｡(XSSFCellStyle にも名称を取得するﾒｿｯﾄﾞがありません｡) ※ EXCEL2010 ﾎｰﾑﾀﾌﾞ→ｾﾙのｽﾀｲﾙ は､一つづつしか削除できません｡ ﾏｸﾛは､開発ﾀﾌﾞ→Visual Basic で､挿入→標準ﾓｼﾞｭｰﾙ を開き ﾃｷｽﾄを張り付けてください｡ 実行は､開発ﾀﾌﾞ→ﾏｸﾛ で､ﾏｸﾛ名を選択して､実行します｡ 最後は､削除してください｡
  `String`
  `getValue(int rowNo, int colNo)`
  現在のrow にあるｾﾙの属性値を返します｡ ｾﾙｵﾌﾞｼﾞｪｸﾄが存在しない場合は､null を返します｡ この処理は､内部Sheetが作成されているか､null でない場合のみ実行できます｡ この処理を実行すると､指定行の Rowｵﾌﾞｼﾞｪｸﾄが内部 Row に設定されます｡
  `String[]`
  `getValues(int rowNo)`
  現在のRow にあるｾﾙの属性値を配列で返します｡ Rowｵﾌﾞｼﾞｪｸﾄが存在しない場合は､長さ０の配列を返します｡ また､Rowｵﾌﾞｼﾞｪｸﾄの中の ｾﾙｵﾌﾞｼﾞｪｸﾄが存在しない場合は､ null がｾｯﾄされます｡ この処理は､内部Sheetが作成されているか､null でない場合のみ実行できます｡ この処理を実行すると､指定行の Rowｵﾌﾞｼﾞｪｸﾄが内部 Row に設定されます｡
  `static void`
  `main(String[] args)`
  ｱﾌﾟﾘｹｰｼｮﾝのｻﾝﾌﾟﾙです｡ Usage: java org.opengion.fukurou.model.ExcelModel 入力ﾌｧｲﾙ名 [出力ﾌｧｲﾙ名] ･･･ 通常は標準出力に行単位に､ｾﾙをﾀﾌﾞ区切り出力します｡ 出力ﾌｧｲﾙ名 を指定すると､EXCEL ﾌｧｲﾙとしてｾｰﾌﾞし直します｡ その場合は､以下のﾊﾟﾗﾒｰﾀも使用できます｡ -CS CellStyleを 設定します｡ -AS useAutoCellSizeを 設定します｡ -FN=*** FontNameを 設定します｡ -FP=** FontPointを 設定します｡ -IMG 画像ﾌｧｲﾙを挿入します｡(-IMG 画像ﾌｧｲﾙ名 ｼｰﾄ番号 行 列)をｽﾍﾟｰｽ区切りで続けます｡
  `void`
  `removeCell(int startCellNum)`
  Excelの処理中のRowｵﾌﾞｼﾞｪｸﾄの指定ｶﾗﾑ以降の余計なCellｵﾌﾞｼﾞｪｸﾄを削除します｡ 指定行の Row ｵﾌﾞｼﾞｪｸﾄから､getLastCellNum() までのｶﾗﾑを､削除します｡ この処理は､内部Rowが作成されているか､null でない場合のみ実行できます｡
  `void`
  `removeRow(int startRowNum)`
  Excelの指定行以降の余計なRowｵﾌﾞｼﾞｪｸﾄを削除します｡ 指定行の Row ｵﾌﾞｼﾞｪｸﾄから､getLastRowNum() までの行を､削除します｡ この処理は､内部Sheetが作成されているか､null でない場合のみ実行できます｡
  `void`
  `removeSheet(int fromNo, int toNo)`
  Excelの指定Sheetｵﾌﾞｼﾞｪｸﾄを削除します｡ 削除するｼｰﾄは､ｼｰﾄ番号でFrom-To形式で指定します｡ Fromも Toも､削除するｼｰﾄ番号を含みます｡ 例えば､0,3 と指定すると､0,1,2,3 の ４ｼｰﾄ分を削除します｡
  `void`
  `saveFile(File file)`
  内部 Workbook ｵﾌﾞｼﾞｪｸﾄをﾌｧｲﾙに書き出します｡ Excelの形式は､ここで指定する出力ﾌｧｲﾙの拡張子ではなく､ｺﾝｽﾄﾗｸﾀで 指定したﾌｧｲﾙの拡張子で決まります｡ 異なる形式の拡張子を持つﾌｧｲﾙを指定した場合､強制的に､ｵｰﾌﾟﾝした Workbook の形式の拡張子を追加します｡ 拡張子は､Excel 2007以降の形式(.xlsx)か､Excel 2003以前の形式(.xls) が指定できます｡ 拡張子が未設定の場合は､ｵｰﾌﾟﾝした Workbook の形式に合わせた拡張子を付与します｡ isAutoCellSize=true の場合は､ここで全Sheetに対してCell幅の自動調整が行われます｡
  `void`
  `setAddTitleSheet(String shtName)`
  Sheet一覧を先頭Sheetに作成する場合のSheet名を指定します｡ これは､Workbook に含まれる Sheet 一覧を作成する場合に､利用可能です｡ この処理は､#saveFile( File ) 処理時に､実行されます｡
  `void`
  `setCellLink(String linkVal, int colNo)`
  Excelの指定ｾﾙにHyperlinkを設定します｡ ここで設定する行は､現在の内部 Row です｡ Row を切り替えたい場合は､#createRow( int ) を呼び出してください｡ このﾒｿｯﾄﾞで設定するHyperlinkは､Sheetに対する LINK_DOCUMENT です｡ 先に､ｾﾙに対する値をｾｯﾄしておいてください｡ Hyperlinkは､文字に対して､下線 と 青字 のｽﾀｲﾙ設定を行います｡ Link文字列(ｼｰﾄ名) が､null や ｾﾞﾛ文字列の場合は､処理を行いません｡
  `void`
  `setCellStyle()`
  ﾃﾞｰﾀ設定する ｾﾙに､罫線を追加します｡ ここで設定するのは､罫線の種類と､罫線の色ですが､内部的に固定にしています｡ Border=CellStyle.BORDER_THIN BorderColor=IndexedColors.BLACK
  `void`
  `setCellValue(String dataVal, int colNo)`
  Excelの指定ｾﾙにﾃﾞｰﾀを設定します｡ ここで設定する行は､現在の内部 Row です｡ Row を切り替えたい場合は､#createRow( int ) を呼び出してください｡ このﾒｿｯﾄﾞでは､ﾃﾞｰﾀを文字列型として設定します｡ この処理は､内部Rowが作成されているか､null でない場合のみ実行できます｡
  `void`
  `setCellValue(String dataVal, int colNo, boolean isNumber)`
  Excelの指定ｾﾙにﾃﾞｰﾀを設定します｡ ここで設定する行は､現在の内部 Row です｡ Row を切り替えたい場合は､#createRow( int ) を呼び出してください｡ このﾒｿｯﾄﾞでは､引数のﾃﾞｰﾀ型をNUMBER型の場合は､doubleに変換して､ それ以外は文字列としてとして設定します｡ この処理は､内部Rowが作成されているか､null でない場合のみ実行できます｡
  `void`
  `setDataStartRow(int st)`
  ﾃﾞｰﾀ行の書き込み開始位置の行番号を設定します｡ これは､autoSize設定で､自動調整するｶﾗﾑを､ﾍｯﾀﾞｰではなく､ ﾃﾞｰﾀ部で計算する場合に使用します｡
  `void`
  `setFont(String fontName, short fontPoint)`
  内部 Workbook に､ﾌｫﾝﾄ名､ﾌｫﾝﾄｻｲｽﾞを設定します｡ fontName(ﾌｫﾝﾄ名)は､"ＭＳ Ｐｺﾞｼｯｸ" など名称になります｡ fontPoint は､ﾌｫﾝﾄの大きさを指定します｡ 内部的には､setFontHeightInPoints(short)ﾒｿｯﾄﾞで設定します｡
  `void`
  `setRecalcSheetName(String[] sheets)`
  EXCELで､出力処理の最後にｾﾙの計算式の再計算をさせるｼｰﾄ名の配列を指定します｡ null の場合は､再計算しません｡ なお､再計算は､saveFile(String)の中で実行されます｡(ｾｰﾌﾞしなければ実行されません｡)
  `void`
  `setRefSheetName(String refSheetName)`
  内部 Workbookより､雛形Sheetをｾｯﾄします｡ これは､雛形ｼｰﾄを使用する場合に､使います｡このﾒｿｯﾄﾞが呼ばれると､ 雛形ｼｰﾄを使用すると判定されます｡ 雛形ｼｰﾄ名が､内部 Workbook に存在しない場合は､ｴﾗｰになります｡ ただし､null をｾｯﾄした場合は､最初のｼｰﾄを雛形ｼｰﾄとして使用すると 判定します｡
  `void`
  `setSheetName(int shtNo, String shtName)`
  内部 Workbook の指定のｼｰﾄ番号の Sheet の名前を設定します｡ 指定のｼｰﾄ名が､既存のｼｰﾄになければ､そのまま設定します｡ すでに､同じ名前のｼｰﾄが存在する場合は､そのｼｰﾄ名の後に (1)､(2)､(3)のような文字列を追加します｡ shtName が null の場合は､"Sheet" が割り振られます｡
  `void`
  `setValues(String[] vals, int rowNo)`
  row にあるｾﾙのｵﾌﾞｼﾞｪｸﾄ値を設定します｡ 行が存在しない場合､行を追加します｡ この処理を行うと､内部の Rowｵﾌﾞｼﾞｪｸﾄがなければ新規作成されます｡
  `void`
  `setValues(String[] vals, int rowNo, boolean[] isNums)`
  row にあるｾﾙのｵﾌﾞｼﾞｪｸﾄ値を設定します｡ 行が存在しない場合､行を追加します｡ 引数に､ｶﾗﾑがNUMBER型かどうかを指定することが出来ます｡ この処理を行うと､内部の Rowｵﾌﾞｼﾞｪｸﾄがなければ新規作成されます｡
  `void`
  `sheetCopy(TextConverter<String,String> conv, String shtName)`
  Workbook の雛形ｼｰﾄのTextConverter した､新しいSheetを作成します｡ 正確には､ １．雛形ｼｰﾄを､ｺﾋﾟｰして､新しいSheet(shtName)を､作成します｡ ２．雛形ｼｰﾄが指定されていない場合は､一番最後のｼｰﾄをｺﾋﾟｰします｡ ２．そのｼｰﾄに対して､TextConverter を行い､文字列変換します｡
  `void`
  `sheetSelected(boolean isSelect)`
  現在のｼｰﾄを選択済み(true)か､非選択済み(false)に設定します｡ 通常は､ｼｰﾄは､先頭ｼｰﾄ以外は､非選択状態になっています｡ ｼｰﾄを選択済みにすることで､印刷範囲を指定する事ができます｡
  `void`
  `textConverter(Map<String,String> convMap)`
  Workbook の全Sheetを対象に､ﾃｷｽﾄ変換処理を行います(XSLX限定)｡ この処理は､#saveFile( File ) の直前に行うのがよいでしょう｡ #activeWorkbook( boolean ) との順番は構いません｡ ･ｼｰﾄ名の一覧をﾋﾟｯｸｱｯﾌﾟします｡ ･ｾﾙ値を､ｾﾙ単位にﾋﾟｯｸｱｯﾌﾟします｡ ･ｵﾌﾞｼﾞｪｸﾄ文字列を､改行単位にﾋﾟｯｸｱｯﾌﾟし､結果を合成します｡ ここでは､内部的に､TextConverterｲﾝﾀｰﾌｪｰｽを作成して処理します｡
  `void`
  `textConverter(TextConverter<String,String> conv)`
  Workbook の全Sheetを対象に､ﾃｷｽﾄ変換処理を行います(XSLX限定)｡ この処理は､#saveFile( File ) の直前に行うのがよいでしょう｡ #activeWorkbook( boolean ) との順番は構いません｡ ･ｼｰﾄ名の一覧をﾋﾟｯｸｱｯﾌﾟします｡ ･ｾﾙ値を､ｾﾙ単位内の改行単位にﾋﾟｯｸｱｯﾌﾟし､結果を合成ます｡ ･ｵﾌﾞｼﾞｪｸﾄ文字列を､改行単位にﾋﾟｯｸｱｯﾌﾟし､結果を合成します｡ ここでは､ｼｰﾄ名､ｾﾙﾃｷｽﾄ､SimpleShapeｵﾌﾞｼﾞｪｸﾄのﾃｷｽﾄを input に､TextConverterｲﾝﾀｰﾌｪｰｽ の change ﾒｿｯﾄﾞを呼び出します｡ 戻り値が､null でないなら､元のﾃﾞｰﾀと置き換えます｡ 戻り値が､null の場合は､そのまま読み飛ばします｡(なにもしません) EXCELへの書き戻しが発生しますので､万一､ﾌｧｲﾙ破損で､開けなくなる場合を 想定して､ﾊﾞｯｸｱｯﾌﾟﾌｧｲﾙは､各自で準備してください｡
  `void`
  `useAutoCellSize(boolean flag)`
  全てのSheetに対して､autoSizeColumn設定を行うかどうか指定します(初期値:false)｡ autoSize設定で､ｶﾗﾑ幅が大きすぎる場合､現状では､ 初期ｶﾗﾑ幅の５倍を限度にしています｡ なお､autoSizeColumn設定は負荷の大きな処理なので､saveFile(String)の 中で実行されます｡(ｾｰﾌﾞしなければ実行されません｡) よって､指定は､いつ行っても構いません｡
  `void`
  `useAutoCellSize(boolean flag, int count)`
  全てのSheetに対して､autoSizeColumn設定を行うかどうか指定します(初期値:false)｡ autoSize設定で､ｶﾗﾑ幅が大きすぎる場合､現状では､ 初期ｶﾗﾑ幅のcount倍を限度に設定します｡ ただし､count がﾏｲﾅｽの場合は､無制限になります｡ なお､autoSizeColumn設定は負荷の大きな処理なので､saveFile(String)の 中で実行されます｡(ｾｰﾌﾞしなければ実行されません｡) よって､指定は､いつ行っても構いません｡

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

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

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

  - ### ExcelModel

    public ExcelModel(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(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(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(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(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(String refSheetName)
    内部 Workbookより､雛形Sheetをｾｯﾄします｡ これは､雛形ｼｰﾄを使用する場合に､使います｡このﾒｿｯﾄﾞが呼ばれると､ 雛形ｼｰﾄを使用すると判定されます｡ 雛形ｼｰﾄ名が､内部 Workbook に存在しない場合は､ｴﾗｰになります｡ ただし､null をｾｯﾄした場合は､最初のｼｰﾄを雛形ｼｰﾄとして使用すると 判定します｡
    パラメータ:
      `refSheetName` - 参照ｼｰﾄ名(nullの場合､参照ｼｰﾄ使用する場合は､先頭のｼｰﾄ)
    変更履歴:
      6.0.2.0 (2014/09/19) 新規作成

  - ### createSheet

    public void createSheet(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, 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 String getSheetName(int shtNo)
    内部 Workbook の 指定のSheet番号のｼｰﾄ名前を返します｡ ｼｰﾄが存在しない場合は､null を返します｡ この処理を行うと､内部の Sheet にも､ここで見つけた Sheet が設定されます｡
    パラメータ:
      `shtNo` - ｼｰﾄ番号
    戻り値:
      shtName ｼｰﾄ名
    変更履歴:
      6.0.2.0 (2014/09/19) 新規作成

  - ### getSheetNo

    public int getSheetNo(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(String[] vals, int rowNo)
    row にあるｾﾙのｵﾌﾞｼﾞｪｸﾄ値を設定します｡ 行が存在しない場合､行を追加します｡ この処理を行うと､内部の Rowｵﾌﾞｼﾞｪｸﾄがなければ新規作成されます｡
    パラメータ:
      `vals` - 新しい配列値｡
      `rowNo` - 値が変更される行(無視されます)
    変更履歴:
      6.0.2.0 (2014/09/19) 新規作成

  - ### setValues

    public void setValues(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(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(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(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 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 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(String imgFile, int shtNo, int rowNo, int colNo)
    指定のｼｰﾄの行･列の箇所に､ｲﾒｰｼﾞﾌｧｲﾙを挿入します｡ ここでは､ｾﾙ範囲ではなく､指定の行列の箇所に､ｱﾝｶｰを設定して､画像ﾌｧｲﾙを 挿入します｡一応､ﾘｻｲｽﾞして､元の大きさ近くに戻しますが､縦横比が変わってしまいます｡ 正確に挿入する場合は､ｾﾙ範囲の指定と､ﾏｰｼﾞﾝを指定しなければなりませんが､ 微調整が必要です｡ この処理で使用される Sheetｵﾌﾞｼﾞｪｸﾄは一時的に作成されます｡(ｷｬｯｼｭされません) 一連処理のどのﾀｲﾐﾝｸﾞで実行しても､内部の状態には影響はありません｡
    パラメータ:
      `imgFile` - 挿入するｲﾒｰｼﾞﾌｧｲﾙ名
      `shtNo` - ｼｰﾄ番号
      `rowNo` - 挿入する行
      `colNo` - 挿入する列
    変更履歴:
      6.0.2.3 (2014/10/10) 新規作成

  - ### addImageFile

    public void addImageFile(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型が見つかりました対応, 7.2.9.0 (2020/10/12) ClientAnchorのｵﾌｾｯﾄ指定は､Units.EMU_PER_PIXEL が単位

  - ### saveFile

    public void saveFile(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) 新規作成

  - ### activeWorkbook

    public void activeWorkbook(List<Integer> rowCntList)
    指定の Workbook の全Sheetを対象に､実際の有効行と有効ｶﾗﾑを元に全体をｼｭﾘﾝｸします｡ ※ 現在､唯一LibreOfficeでのみ､xslx 変換できますが､有効行とｶﾗﾑが ｼｭﾘﾝｸされず､無駄な行とｶﾗﾑが存在します｡ これは､xsl で出力されたﾌｧｲﾙから有効な値を取得して､xslxに適用させるための 機能で､本来きちんとした有効範囲の xslx が生成されれば､不要な処理です｡ 引数のListｵﾌﾞｼﾞｪｸﾄに従って､無条件に処理を行います｡
    パラメータ:
      `rowCntList` - ｼｰﾄごとの有効行の配列ﾘｽﾄ // * @see #getLastRowCellNum()
    関連項目:
      - `activeWorkbook(boolean)`
    変更履歴:
      8.0.1.0 (2021/10/29) 全Sheetを対象に､実際の有効行と有効ｶﾗﾑを取得, 8.0.3.0 (2021/12/17) ｼｰﾄ毎の行数Listに変更｡ // * @param rcList ｼｰﾄごとの有効行の配列ﾘｽﾄ

  - ### textConverter

    public void textConverter(Map<String,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<String,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<String,String> conv, 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 String[] getSheetNames()
    ｼｰﾄ一覧を､内部の Workbook から取得します｡ 取得元が､Workbook なので､xls , xlsx どちらの形式でも取り出せます｡ EXCEL上のｼｰﾄ名を､配列で返します｡
    戻り値:
      ｼｰﾄ名の配列
    関連項目:
      - `POIUtil.getSheetNames(Workbook)`
    変更履歴:
      6.2.6.0 (2015/06/19) 新規作成

  - ### getNames

    public String[] getNames()
    名前定義一覧を内部の Workbook から取得します｡ EXCEL上に定義された名前を､配列で返します｡ ここでは､名前とFormulaをﾀﾌﾞで連結した文字列を配列で返します｡ Name ｵﾌﾞｼﾞｪｸﾄを削除すると､EXCELが開かなくなったりするので､ 取りあえず一覧を作成して､手動で削除してください｡ なお､名前定義には､非表示というのがありますので､ご注意ください｡
    戻り値:
      名前定義(名前+TAB+Formula)の配列
    関連項目:
      - `POIUtil.getNames(Workbook)`
    変更履歴:
      6.2.6.0 (2015/06/19) 新規作成
    このﾒｿｯﾄﾞは、nullを返しません

  - ### getStyleNames

    public 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(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) 新規作成