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

# クラス POIUtil

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

public final class POIUtil extends Object
POI による､Excel/Word/PoworPoint等に対する､ﾕｰﾃｨﾘﾃｨｸﾗｽです｡ 基本的には､ﾈｲﾃｨﾌﾞﾌｧｲﾙを読み取り､ﾃｷｽﾄを取得する機能が主です｡ Excel､Word､PowerPoint､Visio､Publisher からのﾃｷｽﾄ取得が可能です｡

変更履歴:
  6.0.2.0 (2014/09/19) 新規作成, 6.2.0.0 (2015/02/27) ﾊﾟｯｹｰｼﾞ変更(util → model)
機能分類
  その他
導入されたバージョン:
  JDK7.0,

- ## フィールドの概要

  フィールド
  修飾子とタイプ
  フィールド
  説明
  `static final String`
  `POI_SUFIX`
  対象ｻﾌｨｯｸｽ "ppt,pptx,doc,docx,xls,xlsx,xlsm"

- ## メソッドの概要

  修飾子とタイプ
  メソッド
  説明
  `static void`
  `activeWorkbook(org.apache.poi.ss.usermodel.Workbook wkbook, boolean isCellDel)`
  指定の Workbook の全Sheetを対象に､空行を取り除き､全体をｼｭﾘﾝｸします｡ この処理は､#saveFile( String ) の直前に行うのがよいでしょう｡ ここでは､Row を逆順にｽｷｬﾝし､Cellが 存在しない間は､行を削除します｡ 途中の空行の削除ではなく､最終行からの連続した空行の削除です｡ isCellDel=true を指定すると､Cellの末尾削除を行います｡ 有効行の最後のCellから空ｾﾙを削除していきます｡ 表形式などの場合は､Cellのあるなしで､ﾚｲｱｳﾄが崩れる場合がありますので 処理が不要な場合は､isCellDel=false を指定してください｡
  `static void`
  `activeWorkbook(org.apache.poi.ss.usermodel.Workbook wkbook, List<Integer> rowCntList)`
  指定の Workbook の全Sheetを対象に､実際の有効行と有効ｶﾗﾑを元に全体をｼｭﾘﾝｸします｡ ※ 現在､唯一LibreOfficeでのみ､xslx 変換できますが､有効行とｶﾗﾑが ｼｭﾘﾝｸされず､無駄な行とｶﾗﾑが存在します｡ これは､xsl で出力されたﾌｧｲﾙから有効な値を取得して､xslxに適用させるための 機能で､本来きちんとした有効範囲の xslx が生成されれば､不要な処理です｡ 引数のListｵﾌﾞｼﾞｪｸﾄに従って､無条件に処理を行います｡
  `static void`
  `autoCellSize(org.apache.poi.ss.usermodel.Workbook wkbook, int maxColCount, int dataStRow)`
  全てのSheetに対して､autoSizeColumn設定を行います｡ 重たい処理なので､ﾌｧｲﾙの書き出し直前に一度だけ実行するのがよいでしょう｡ autoSize設定で､ｶﾗﾑ幅が大きすぎる場合､現状では､ 初期ｶﾗﾑ幅のmaxColCount倍を限度に設定します｡ ただし､maxColCount がﾏｲﾅｽの場合は､無制限になります｡
  `static org.apache.poi.ss.usermodel.Workbook`
  `createWorkbook(File file)`
  ﾌｧｲﾙから､Workbookｵﾌﾞｼﾞｪｸﾄを新規に作成します｡
  `static void`
  `excelReader1(File file, TextConverter<String,String> conv)`
  引数ﾌｧｲﾙ(Excel)を､ﾃｷｽﾄ化します｡ TableModelHelper を与えることで､EXCELﾃﾞｰﾀをﾃｷｽﾄ化できます｡ ここでは､HSSF(.xls)形式を処理します｡ ｼｰﾄ名､ｾﾙ､ﾃｷｽﾄｵﾌﾞｼﾞｪｸﾄをﾃｷｽﾄ化します｡
  `static void`
  `excelReader2(File file, TextConverter<String,String> conv)`
  引数ﾌｧｲﾙ(Excel)を､ﾃｷｽﾄ化します｡ TableModelHelper を与えることで､EXCELﾃﾞｰﾀをﾃｷｽﾄ化できます｡ ここでは､ExcelModelを使用して､(.xlsx , .xlsm)形式を処理します｡ ｼｰﾄ名､ｾﾙ､ﾃｷｽﾄｵﾌﾞｼﾞｪｸﾄをﾃｷｽﾄ化します｡
  `static String`
  `extractor(File file)`
  引数ﾌｧｲﾙを､POITextExtractor を使用してﾃｷｽﾄ化します｡ Excel､Word､PowerPoint､Visio､Publisher からのﾃｷｽﾄ取得が可能です｡ 拡張子から､ﾌｧｲﾙの種類を自動判別します｡
  `static String`
  `extractor(File file, String encode)`
  引数ﾌｧｲﾙ(Text)を､ﾃｷｽﾄ化します｡ ここでは､ﾌｧｲﾙとｴﾝｺｰﾄﾞを指定して､ﾌｧｲﾙのﾃｷｽﾄ全てを読み取ります｡
  `static String`
  `getCelKigo(int rowNo, int colNo)`
  Excelの行番号,列番号より､ｾﾙ記号を求めます｡ 行番号は､0から始まる数字ですが､記号化する場合は､１から始まります｡ Excelの列記号とは､A,B,C,…,Z,AA,AB,…,ZZ,AAA,AAB,… と続きます｡ つまり､ｱﾙﾌｧﾍﾞｯﾄだけの､２６進数になります｡(ｾﾞﾛの扱いが少し特殊です) 列番号は､0から始まる数字で､0=A,1=B,2=C,…,25=Z,26=AA,27=AB,…,701=ZZ,702=AAA,703=AAB,… EXCELの行列記号にする場合は､この列記号に､行番号を､＋１して付ければよいだけです｡ (※ 列番号に＋１するのは､内部では０から始まる列番号ですが､表示上は１から始まります)
  `static String`
  `getCellMsg(org.apache.poi.ss.usermodel.Cell oCell)`
  ｾﾙ情報を返します｡ ｴﾗｰ発生時に､どのｾﾙでｴﾗｰが発生したかの情報を取得できるようにします｡
  `static String[]`
  `getNames(org.apache.poi.ss.usermodel.Workbook wkbook)`
  名前定義一覧を取得します｡ EXCEL上に定義された名前を､配列で返します｡ ここでは､名前とFormulaをﾀﾌﾞで連結した文字列を配列で返します｡ Name ｵﾌﾞｼﾞｪｸﾄを削除すると､EXCELが開かなくなったりするので､ 取りあえず一覧を作成して､手動で削除してください｡ なお､名前定義には､非表示というのがありますので､ご注意ください｡ ◆ 非表示になっている名前の定義を表示にする EXCEL VBA ﾏｸﾛ http://dev.classmethod.jp/tool/excel-delete-name/ Sub VisibleNames() Dim name For Each name In ActiveWorkbook.Names If name.Visible = False Then name.Visible = True End If Next MsgBox "すべての名前の定義を表示しました｡", vbOKOnly End Sub ※ EXCEL2010 数式ﾀﾌﾞ→名前の管理 で､複数選択で､削除できます｡ ただし､非表示の名前定義は､先に表示しないと､削除できません｡ ◆ 名前の一括削除 EXCEL VBA ﾏｸﾛ http://komitsudo.blog70.fc2.com/blog-entry-104.html Sub DeleteNames() Dim name On Error Resume Next For Each name In ActiveWorkbook.Names If Not name.BuiltIn Then name.Delete End If Next MsgBox "すべての名前の定義を削除しました｡", vbOKOnly End Sub
  `static String`
  `getNumericTypeString(org.apache.poi.ss.usermodel.Cell oCell)`
  ｾﾙ値が数字の場合に､数字か日付かを判断して､対応する文字列を返します｡
  `static String[]`
  `getSheetNames(org.apache.poi.ss.usermodel.Workbook wkbook)`
  ｼｰﾄ一覧を､Workbook から取得します｡ 取得元が､Workbook なので､xls , xlsx どちらの形式でも取り出せます｡ EXCEL上のｼｰﾄ名を､配列で返します｡
  `static String[]`
  `getStyleNames(org.apache.poi.ss.usermodel.Workbook wkbook)`
  書式のｽﾀｲﾙ一覧を取得します｡ EXCEL上に定義された書式のｽﾀｲﾙを､配列で返します｡ 書式のｽﾀｲﾙの名称は､CellStyle にﾒｿｯﾄﾞが定義されていません｡ 実ｸﾗｽである HSSFCellStyle にｷｬｽﾄして使用する 必要があります｡(XSSFCellStyle にも名称を取得するﾒｿｯﾄﾞがありません｡) ※ EXCEL2010 ﾎｰﾑﾀﾌﾞ→ｾﾙのｽﾀｲﾙ は､一つづつしか削除できません｡ ﾏｸﾛは､開発ﾀﾌﾞ→Visual Basic で､挿入→標準ﾓｼﾞｭｰﾙ を開き ﾃｷｽﾄを張り付けてください｡ 実行は､開発ﾀﾌﾞ→ﾏｸﾛ で､ﾏｸﾛ名を選択して､実行します｡ 最後は､削除してください｡ ◆ ｽﾀｲﾙの一括削除 EXCEL VBA ﾏｸﾛ http://komitsudo.blog70.fc2.com/blog-entry-104.html Sub DeleteStyle() Dim styl On Error Resume Next For Each styl In ActiveWorkbook.Styles If Not styl.BuiltIn Then styl.Delete End If Next MsgBox "すべての追加ｽﾀｲﾙを削除しました｡", vbOKOnly End Sub ◆ 名前の表示､削除､ｽﾀｲﾙの削除の一括実行 EXCEL VBA ﾏｸﾛ Sub AllDelete() Call VisibleNames Call DeleteNames Call DeleteStyle MsgBox "すべての処理を完了しました｡", vbOKOnly End Sub
  `static String`
  `getValue(org.apache.poi.ss.usermodel.Cell oCell)`
  ｾﾙｵﾌﾞｼﾞｪｸﾄ(Cell)から値を取り出します｡ ｾﾙｵﾌﾞｼﾞｪｸﾄが存在しない場合は､null を返します｡ それ以外で､うまく値を取得できなかった場合は､ｾﾞﾛ文字列を返します｡
  `static boolean`
  `isPOI(File file)`
  引数ﾌｧｲﾙが､POI関連の拡張子ﾌｧｲﾙかどうかを判定します｡ Excel､Word､PowerPoint､Visio､Publisher からのﾃｷｽﾄ取得が可能です｡ 拡張子が､ppt,pptx,doc,docx,xls,xlsx,xlsm のﾌｧｲﾙの場合､true を返します｡
  `static int[]`
  `kigo2rowCol(String kigo)`
  Excelの行列記号を､行番号と列番号に分解します｡ Excelの行列記号とは､A1 , B5 , AA23 などの形式を指します｡ これを､行番号と列番号に分解します｡例えば､A1→0行0列､B5→4行1列､AA23→22行26列 となります｡ 分解した結果は､内部変数の､rowNo と colNo にｾｯﾄされます｡ これらは､0 から始まる int型の数字で表します｡ ①行-列形式 行列は､EXCELｵﾌﾞｼﾞｪｸﾄに準拠するため､０から始まる整数です｡ 0-0 ⇒ A1 , 1-0 ⇒ A2 , 0-1 ⇒ B1 になります｡ ②EXCEL表記 EXCEL表記に準拠した､A1,A2,B1 の記述も処理できるように対応します｡ なお､A1,A2,B1 の記述は､必ず､英字1文字＋数字 にしてください｡(A～Zまで) ③EXCELｼｰﾄ名をｷｰに割り当てるために､"SHEET" という記号に対応します｡ rowNo = -1 をｾｯﾄします｡
  `static void`
  `main(String[] args)`
  ｱﾌﾟﾘｹｰｼｮﾝのｻﾝﾌﾟﾙです｡ 入力ﾌｧｲﾙ名 は必須で､第一引数固定です｡ 第二引数は､処理方法で､-ALL か､-LINE を指定します｡何も指定しなければ､-ALL です｡ 第三引数を指定した場合は､Encode を指定します｡ Usage: java org.opengion.fukurou.model.POIUtil 入力ﾌｧｲﾙ名 [処理方式] [ｴﾝｺｰﾄﾞ] -A(LL) ･･･ ALL 一括処理(初期値) -L(INE) ･･･ LINE 行単位処理 -S(heet) ･･･ Sheet名一覧 -N(AME) ･･･ NAME:名前定義 -C(ellStyle) ･･･ CellStyle:書式のｽﾀｲﾙ
  `static void`
  `makeShapeColor(org.apache.poi.xssf.usermodel.XSSFSimpleShape shape, int[] col)`
  XSSFSimpleShapeｵﾌﾞｼﾞｪｸﾄにｶﾗｰを設定します。
  `static void`
  `makeShapeLink(org.apache.poi.xssf.usermodel.XSSFSimpleShape shape, String url)`
  XSSFSimpleShapeｵﾌﾞｼﾞｪｸﾄにﾘﾝｸを設定します。
  `static void`
  `setValue(org.apache.poi.ss.usermodel.Cell oCell, String val)`
  ｾﾙｵﾌﾞｼﾞｪｸﾄ(Cell)に､値をｾｯﾄします｡ ｾﾙｵﾌﾞｼﾞｪｸﾄが存在しない場合は､何もしません｡ 引数は､文字列で渡しますが､ｾﾙの形式に合わせて､変換します｡ 変換がうまくいかなかった場合は､ｴﾗｰになりますので､ご注意ください｡
  `static void`
  `textReader(File file, TextConverter<String,String> conv)`
  引数ﾌｧｲﾙ(Word,PoworPoint,Excel)を､TableModelHelper を使用してﾃｷｽﾄ化します｡ ここでは､ﾌｧｲﾙ名の拡張子で､処理するﾒｿｯﾄﾞを選別します｡ 拡張子が､対象かどうかは､#isPOI( File ) ﾒｿｯﾄﾞで判定できます｡ TableModelHelper によるｲﾍﾞﾝﾄ処理できますが､TEXTというｶﾗﾑ名を持つ 表形式ｵﾌﾞｼﾞｪｸﾄの形で処理されます｡ また､内部的に､先頭に､# がある場合や､行ﾃﾞｰﾀが存在しない場合は､ ｽｷｯﾌﾟされます｡
  `static void`
  `textReader(File file, TextConverter<String,String> conv, String encode)`
  引数ﾌｧｲﾙ(Text)を､ﾃｷｽﾄ化します｡ ここでは､ﾌｧｲﾙとｴﾝｺｰﾄﾞを指定して､ﾌｧｲﾙのﾃｷｽﾄ全てを読み取ります｡

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

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

- ## フィールド詳細

  - ### POI_SUFIX

    public static final String POI_SUFIX
    対象ｻﾌｨｯｸｽ "ppt,pptx,doc,docx,xls,xlsx,xlsm"
    関連項目:
      - 定数フィールド値

- ## メソッドの詳細

  - ### isPOI

    public static boolean isPOI(File file)
    引数ﾌｧｲﾙが､POI関連の拡張子ﾌｧｲﾙかどうかを判定します｡ Excel､Word､PowerPoint､Visio､Publisher からのﾃｷｽﾄ取得が可能です｡ 拡張子が､ppt,pptx,doc,docx,xls,xlsx,xlsm のﾌｧｲﾙの場合､true を返します｡
    パラメータ:
      `file` - 判定するﾌｧｲﾙ
    戻り値:
      POI関連の拡張子の場合､true
    変更履歴:
      6.2.3.0 (2015/05/01) POI関連の拡張子ﾌｧｲﾙかどうかを判定

  - ### extractor

    public static String extractor(File file)
    引数ﾌｧｲﾙを､POITextExtractor を使用してﾃｷｽﾄ化します｡ Excel､Word､PowerPoint､Visio､Publisher からのﾃｷｽﾄ取得が可能です｡ 拡張子から､ﾌｧｲﾙの種類を自動判別します｡
    パラメータ:
      `file` - 入力ﾌｧｲﾙ名
    戻り値:
      変換後のﾃｷｽﾄ
    変更履歴:
      6.0.2.0 (2014/09/19) 新規作成, 6.2.0.0 (2015/02/27) getText → extractor に変更, 8.0.0.0 (2021/07/31) ExtractorFactory → POIXMLExtractorFactory に変更
    このﾒｿｯﾄﾞは、nullを返しません

  - ### extractor

    public static String extractor(File file, String encode)
    引数ﾌｧｲﾙ(Text)を､ﾃｷｽﾄ化します｡ ここでは､ﾌｧｲﾙとｴﾝｺｰﾄﾞを指定して､ﾌｧｲﾙのﾃｷｽﾄ全てを読み取ります｡
    パラメータ:
      `file` - 入力ﾌｧｲﾙ
      `encode` - ｴﾝｺｰﾄﾞ名
    戻り値:
      ﾌｧｲﾙのﾃｷｽﾄ
    変更履歴:
      6.2.2.0 (2015/03/27) 引数ﾌｧｲﾙ(Text)を､ﾃｷｽﾄ化｡, 6.2.3.0 (2015/05/01) textReader → extractor に変更

  - ### textReader

    public static void textReader(File file, TextConverter<String,String> conv, String encode)
    引数ﾌｧｲﾙ(Text)を､ﾃｷｽﾄ化します｡ ここでは､ﾌｧｲﾙとｴﾝｺｰﾄﾞを指定して､ﾌｧｲﾙのﾃｷｽﾄ全てを読み取ります｡
    パラメータ:
      `file` - 入力ﾌｧｲﾙ
      `conv` - ｲﾍﾞﾝﾄ処理させるI/F
      `encode` - ｴﾝｺｰﾄﾞ名
    変更履歴:
      6.2.2.0 (2015/03/27) 引数ﾌｧｲﾙ(Text)を､ﾃｷｽﾄ化｡

  - ### textReader

    public static void textReader(File file, TextConverter<String,String> conv)
    引数ﾌｧｲﾙ(Word,PoworPoint,Excel)を､TableModelHelper を使用してﾃｷｽﾄ化します｡ ここでは､ﾌｧｲﾙ名の拡張子で､処理するﾒｿｯﾄﾞを選別します｡ 拡張子が､対象かどうかは､#isPOI( File ) ﾒｿｯﾄﾞで判定できます｡ TableModelHelper によるｲﾍﾞﾝﾄ処理できますが､TEXTというｶﾗﾑ名を持つ 表形式ｵﾌﾞｼﾞｪｸﾄの形で処理されます｡ また､内部的に､先頭に､# がある場合や､行ﾃﾞｰﾀが存在しない場合は､ ｽｷｯﾌﾟされます｡
    パラメータ:
      `file` - 入力ﾌｧｲﾙ
      `conv` - ｲﾍﾞﾝﾄ処理させるI/F
    変更履歴:
      6.2.3.0 (2015/05/01) 新規作成, 6.2.5.0 (2015/06/05) xls,xlsxは､それぞれ excelReader1,excelReader2 で処理します｡

  - ### excelReader1

    public static void excelReader1(File file, TextConverter<String,String> conv)
    引数ﾌｧｲﾙ(Excel)を､ﾃｷｽﾄ化します｡ TableModelHelper を与えることで､EXCELﾃﾞｰﾀをﾃｷｽﾄ化できます｡ ここでは､HSSF(.xls)形式を処理します｡ ｼｰﾄ名､ｾﾙ､ﾃｷｽﾄｵﾌﾞｼﾞｪｸﾄをﾃｷｽﾄ化します｡
    パラメータ:
      `file` - 入力ﾌｧｲﾙ
      `conv` - ｲﾍﾞﾝﾄ処理させるI/F
    関連項目:
      - `ExcelModel`
    変更履歴:
      6.2.5.0 (2015/06/05) 新規作成

  - ### excelReader2

    public static void excelReader2(File file, TextConverter<String,String> conv)
    引数ﾌｧｲﾙ(Excel)を､ﾃｷｽﾄ化します｡ TableModelHelper を与えることで､EXCELﾃﾞｰﾀをﾃｷｽﾄ化できます｡ ここでは､ExcelModelを使用して､(.xlsx , .xlsm)形式を処理します｡ ｼｰﾄ名､ｾﾙ､ﾃｷｽﾄｵﾌﾞｼﾞｪｸﾄをﾃｷｽﾄ化します｡
    パラメータ:
      `file` - 入力ﾌｧｲﾙ
      `conv` - ｲﾍﾞﾝﾄ処理させるI/F
    関連項目:
      - `ExcelModel`
    変更履歴:
      6.2.5.0 (2015/06/05) 新規作成, 6.3.1.0 (2015/06/28) TextConverterに､引数(cmnt)を追加, 6.3.9.0 (2015/11/06) Java 8 ﾗﾑﾀﾞ式に変更

  - ### kigo2rowCol

    public static int[] kigo2rowCol(String kigo)
    Excelの行列記号を､行番号と列番号に分解します｡ Excelの行列記号とは､A1 , B5 , AA23 などの形式を指します｡ これを､行番号と列番号に分解します｡例えば､A1→0行0列､B5→4行1列､AA23→22行26列 となります｡ 分解した結果は､内部変数の､rowNo と colNo にｾｯﾄされます｡ これらは､0 から始まる int型の数字で表します｡ ①行-列形式 行列は､EXCELｵﾌﾞｼﾞｪｸﾄに準拠するため､０から始まる整数です｡ 0-0 ⇒ A1 , 1-0 ⇒ A2 , 0-1 ⇒ B1 になります｡ ②EXCEL表記 EXCEL表記に準拠した､A1,A2,B1 の記述も処理できるように対応します｡ なお､A1,A2,B1 の記述は､必ず､英字1文字＋数字 にしてください｡(A～Zまで) ③EXCELｼｰﾄ名をｷｰに割り当てるために､"SHEET" という記号に対応します｡ rowNo = -1 をｾｯﾄします｡
    パラメータ:
      `kigo` - Excelの行列記号( A1 , B5 , AA23 など )
    戻り値:
      行と列の番号を持った配列([0]=行=ROW , [1]=列=COL)
    変更履歴:
      6.0.3.0 (2014/11/13) 新規作成, 6.2.6.0 (2015/06/19) 行-列形式と､SHEET文字列判定を採用｡
    このﾒｿｯﾄﾞは、nullを返しません

  - ### getValue

    public static String getValue(org.apache.poi.ss.usermodel.Cell oCell)
    ｾﾙｵﾌﾞｼﾞｪｸﾄ(Cell)から値を取り出します｡ ｾﾙｵﾌﾞｼﾞｪｸﾄが存在しない場合は､null を返します｡ それ以外で､うまく値を取得できなかった場合は､ｾﾞﾛ文字列を返します｡
    パラメータ:
      `oCell` - EXCELのｾﾙｵﾌﾞｼﾞｪｸﾄ
    戻り値:
      ｾﾙの値
    変更履歴:
      3.8.5.3 (2006/08/07) 取り出し方法を少し修正, 5.5.1.2 (2012/04/06) ﾌｫｰﾏｯﾄｾﾙを実行して､その結果を再帰的に処理する｡, 6.0.3.0 (2014/11/13) ｾﾙﾌｫｰﾏｯﾄｴﾗｰ時に､RuntimeException を throw しない｡, 6.4.2.0 (2016/01/29) StringUtil#ogStackTrace(Throwable) を､ThrowUtil#ogStackTrace(String,Throwable) に置き換え｡, 6.5.0.0 (2016/09/30) poi-3.15 対応(Cell.CELL_TYPE_XXXX → CellType.XXXX), 7.0.0.0 (2018/10/01) 警告:[deprecation] CellのgetCellTypeEnum()は推奨されません (POI4.0.0), 7.3.0.0 (2021/01/06) ﾌｫｰﾏｯﾄｴﾗｰ時に､ｴﾗｰﾒｯｾｰｼﾞ取得でもｴﾗｰになる｡, 8.0.0.0 (2021/07/31) FORMULA処理のｴﾗｰ対応(出来るだけ…), 8.1.2.3 (2022/05/20) 計算式の計算を行う。

  - ### setValue

    public static void setValue(org.apache.poi.ss.usermodel.Cell oCell, String val)
    ｾﾙｵﾌﾞｼﾞｪｸﾄ(Cell)に､値をｾｯﾄします｡ ｾﾙｵﾌﾞｼﾞｪｸﾄが存在しない場合は､何もしません｡ 引数は､文字列で渡しますが､ｾﾙの形式に合わせて､変換します｡ 変換がうまくいかなかった場合は､ｴﾗｰになりますので､ご注意ください｡
    パラメータ:
      `oCell` - EXCELのｾﾙｵﾌﾞｼﾞｪｸﾄ
      `val` - ｾｯﾄする値
    変更履歴:
      6.3.9.0 (2015/11/06) 新規追加, 6.5.0.0 (2016/09/30) poi-3.15 対応(Cell.CELL_TYPE_XXXX → CellType.XXXX), 7.0.0.0 (2018/10/01) 警告:[deprecation] CellのgetCellTypeEnum()は推奨されません (POI4.0.0), 7.3.0.0 (2021/01/06) setCellType( CellType.BLANK )(Deprecated) → setBlank() (poi-4.1.2)

  - ### getNumericTypeString

    public static String getNumericTypeString(org.apache.poi.ss.usermodel.Cell oCell)
    ｾﾙ値が数字の場合に､数字か日付かを判断して､対応する文字列を返します｡
    パラメータ:
      `oCell` - EXCELのｾﾙｵﾌﾞｼﾞｪｸﾄ
    戻り値:
      数字の場合は､文字列に変換した結果を､日付の場合は､"yyyyMMddHHmmss" 形式で返します｡
    変更履歴:
      3.8.5.3 (2006/08/07) 新規追加, 5.5.7.2 (2012/10/09) HybsDateUtil を利用するように修正します｡, 6.3.1.0 (2015/06/28) ExcelStyleFormat を使用します｡

  - ### autoCellSize

    public static void autoCellSize(org.apache.poi.ss.usermodel.Workbook wkbook, int maxColCount, int dataStRow)
    全てのSheetに対して､autoSizeColumn設定を行います｡ 重たい処理なので､ﾌｧｲﾙの書き出し直前に一度だけ実行するのがよいでしょう｡ autoSize設定で､ｶﾗﾑ幅が大きすぎる場合､現状では､ 初期ｶﾗﾑ幅のmaxColCount倍を限度に設定します｡ ただし､maxColCount がﾏｲﾅｽの場合は､無制限になります｡
    パラメータ:
      `wkbook` - 処理対象のWorkbook
      `maxColCount` - 最大幅を標準ｾﾙ幅の何倍にするかを指定｡ﾏｲﾅｽの場合は､無制限
      `dataStRow` - ﾃﾞｰﾀ行の開始位置｡未設定時は､-1
    変更履歴:
      6.0.2.0 (2014/09/19) 新規作成, 6.8.2.4 (2017/11/20) rowObj のnull対策(poi-3.17)

  - ### activeWorkbook

    public static void activeWorkbook(org.apache.poi.ss.usermodel.Workbook wkbook, boolean isCellDel)
    指定の Workbook の全Sheetを対象に､空行を取り除き､全体をｼｭﾘﾝｸします｡ この処理は､#saveFile( String ) の直前に行うのがよいでしょう｡ ここでは､Row を逆順にｽｷｬﾝし､Cellが 存在しない間は､行を削除します｡ 途中の空行の削除ではなく､最終行からの連続した空行の削除です｡ isCellDel=true を指定すると､Cellの末尾削除を行います｡ 有効行の最後のCellから空ｾﾙを削除していきます｡ 表形式などの場合は､Cellのあるなしで､ﾚｲｱｳﾄが崩れる場合がありますので 処理が不要な場合は､isCellDel=false を指定してください｡
    パラメータ:
      `wkbook` - 処理対象のWorkbook
      `isCellDel` - Cellの末尾削除を行うかどうか(true:行う/false:行わない)
    関連項目:
      - `activeWorkbook(Workbook,List)`
    変更履歴:
      6.0.2.0 (2014/09/19) 新規作成, 6.0.2.3 (2014/10/10) CellStyle の有無も判定基準に含めます｡, 6.0.2.5 (2014/10/31) Cellの開始､終了番号が､ﾏｲﾅｽのｹｰｽの対応, 6.5.0.0 (2016/09/30) poi-3.15 対応(Cell.CELL_TYPE_XXXX → CellType.XXXX), 7.0.0.0 (2018/10/01) 警告:[deprecation] CellのgetCellTypeEnum()は推奨されません (POI4.0.0), 8.0.1.0 (2021/10/29) CellStyle は not null になったための修正

  - ### activeWorkbook

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

  - ### createWorkbook

    public static org.apache.poi.ss.usermodel.Workbook createWorkbook(File file)
    ﾌｧｲﾙから､Workbookｵﾌﾞｼﾞｪｸﾄを新規に作成します｡
    パラメータ:
      `file` - 入力ﾌｧｲﾙ
    戻り値:
      Workbookｵﾌﾞｼﾞｪｸﾄ
    変更履歴:
      6.0.2.3 (2014/10/10) 新規作成, 6.2.0.0 (2015/02/27) ﾌｧｲﾙ引数を､String → File に変更, 7.0.0.0 (2018/10/01) poi-4.0.0 例外InvalidFormatExceptionは対応するtry文の本体ではｽﾛｰされません
    このﾒｿｯﾄﾞは、nullを返しません

  - ### getSheetNames

    public static String[] getSheetNames(org.apache.poi.ss.usermodel.Workbook wkbook)
    ｼｰﾄ一覧を､Workbook から取得します｡ 取得元が､Workbook なので､xls , xlsx どちらの形式でも取り出せます｡ EXCEL上のｼｰﾄ名を､配列で返します｡
    パラメータ:
      `wkbook` - Workbookｵﾌﾞｼﾞｪｸﾄ
    戻り値:
      ｼｰﾄ名の配列
    変更履歴:
      6.0.2.3 (2014/10/10) 新規作成

  - ### getNames

    public static String[] getNames(org.apache.poi.ss.usermodel.Workbook wkbook)
    名前定義一覧を取得します｡ EXCEL上に定義された名前を､配列で返します｡ ここでは､名前とFormulaをﾀﾌﾞで連結した文字列を配列で返します｡ Name ｵﾌﾞｼﾞｪｸﾄを削除すると､EXCELが開かなくなったりするので､ 取りあえず一覧を作成して､手動で削除してください｡ なお､名前定義には､非表示というのがありますので､ご注意ください｡ ◆ 非表示になっている名前の定義を表示にする EXCEL VBA ﾏｸﾛ http://dev.classmethod.jp/tool/excel-delete-name/ Sub VisibleNames() Dim name For Each name In ActiveWorkbook.Names If name.Visible = False Then name.Visible = True End If Next MsgBox "すべての名前の定義を表示しました｡", vbOKOnly End Sub ※ EXCEL2010 数式ﾀﾌﾞ→名前の管理 で､複数選択で､削除できます｡ ただし､非表示の名前定義は､先に表示しないと､削除できません｡ ◆ 名前の一括削除 EXCEL VBA ﾏｸﾛ http://komitsudo.blog70.fc2.com/blog-entry-104.html Sub DeleteNames() Dim name On Error Resume Next For Each name In ActiveWorkbook.Names If Not name.BuiltIn Then name.Delete End If Next MsgBox "すべての名前の定義を削除しました｡", vbOKOnly End Sub
    パラメータ:
      `wkbook` - Workbookｵﾌﾞｼﾞｪｸﾄ
    戻り値:
      名前定義(名前+TAB+Formula)の配列
    変更履歴:
      6.0.2.3 (2014/10/10) 新規作成, 7.0.0.0 (2018/10/01) 警告:[deprecation] WorkbookのgetNameAt(int)は推奨されません (POI4.0.0)
    このﾒｿｯﾄﾞは、nullを返しません

  - ### getStyleNames

    public static String[] getStyleNames(org.apache.poi.ss.usermodel.Workbook wkbook)
    書式のｽﾀｲﾙ一覧を取得します｡ EXCEL上に定義された書式のｽﾀｲﾙを､配列で返します｡ 書式のｽﾀｲﾙの名称は､CellStyle にﾒｿｯﾄﾞが定義されていません｡ 実ｸﾗｽである HSSFCellStyle にｷｬｽﾄして使用する 必要があります｡(XSSFCellStyle にも名称を取得するﾒｿｯﾄﾞがありません｡) ※ EXCEL2010 ﾎｰﾑﾀﾌﾞ→ｾﾙのｽﾀｲﾙ は､一つづつしか削除できません｡ ﾏｸﾛは､開発ﾀﾌﾞ→Visual Basic で､挿入→標準ﾓｼﾞｭｰﾙ を開き ﾃｷｽﾄを張り付けてください｡ 実行は､開発ﾀﾌﾞ→ﾏｸﾛ で､ﾏｸﾛ名を選択して､実行します｡ 最後は､削除してください｡ ◆ ｽﾀｲﾙの一括削除 EXCEL VBA ﾏｸﾛ http://komitsudo.blog70.fc2.com/blog-entry-104.html Sub DeleteStyle() Dim styl On Error Resume Next For Each styl In ActiveWorkbook.Styles If Not styl.BuiltIn Then styl.Delete End If Next MsgBox "すべての追加ｽﾀｲﾙを削除しました｡", vbOKOnly End Sub ◆ 名前の表示､削除､ｽﾀｲﾙの削除の一括実行 EXCEL VBA ﾏｸﾛ Sub AllDelete() Call VisibleNames Call DeleteNames Call DeleteStyle MsgBox "すべての処理を完了しました｡", vbOKOnly End Sub
    パラメータ:
      `wkbook` - Workbookｵﾌﾞｼﾞｪｸﾄ
    戻り値:
      書式のｽﾀｲﾙ一覧
    変更履歴:
      6.0.2.3 (2014/10/10) 新規作成
    このﾒｿｯﾄﾞは、nullを返しません

  - ### getCellMsg

    public static String getCellMsg(org.apache.poi.ss.usermodel.Cell oCell)
    ｾﾙ情報を返します｡ ｴﾗｰ発生時に､どのｾﾙでｴﾗｰが発生したかの情報を取得できるようにします｡
    パラメータ:
      `oCell` - EXCELのｾﾙｵﾌﾞｼﾞｪｸﾄ
    戻り値:
      ｾﾙ情報の文字列
    変更履歴:
      6.0.2.0 (2014/09/19) 新規作成, 6.0.3.0 (2014/11/13) ｾﾙ情報を作成する時に､値もｾｯﾄします｡, 6.2.2.0 (2015/03/27) celKigo を求めるﾛｼﾞｯｸ変更, 6.3.1.0 (2015/06/28) rowNo(行番号)も引数に取るようにします｡

  - ### getCelKigo

    public static String getCelKigo(int rowNo, int colNo)
    Excelの行番号,列番号より､ｾﾙ記号を求めます｡ 行番号は､0から始まる数字ですが､記号化する場合は､１から始まります｡ Excelの列記号とは､A,B,C,…,Z,AA,AB,…,ZZ,AAA,AAB,… と続きます｡ つまり､ｱﾙﾌｧﾍﾞｯﾄだけの､２６進数になります｡(ｾﾞﾛの扱いが少し特殊です) 列番号は､0から始まる数字で､0=A,1=B,2=C,…,25=Z,26=AA,27=AB,…,701=ZZ,702=AAA,703=AAB,… EXCELの行列記号にする場合は､この列記号に､行番号を､＋１して付ければよいだけです｡ (※ 列番号に＋１するのは､内部では０から始まる列番号ですが､表示上は１から始まります)
    パラメータ:
      `rowNo` - 行番号(0,1,2,…)
      `colNo` - 列番号(0,1,2,…)
    戻り値:
      Excelの列記号(A1,B2,C3,…)
    変更履歴:
      6.2.2.0 (2015/03/27) celKigo を求めるﾛｼﾞｯｸ変更, 6.3.1.0 (2015/06/28) rowNo(行番号)も引数に取るようにします｡

  - ### makeShapeLink

    public static void makeShapeLink(org.apache.poi.xssf.usermodel.XSSFSimpleShape shape, String url)
    XSSFSimpleShapeｵﾌﾞｼﾞｪｸﾄにﾘﾝｸを設定します。 処理の簡素化のために、url引数が null の場合は、何もせず処理を終了します。
    パラメータ:
      `shape` - XSSFSimpleShapeｵﾌﾞｼﾞｪｸﾄ
      `url` - ﾘﾝｸ文字列
    変更履歴:
      8.1.0.1 (2022/01/07) ﾃｷｽﾄﾍﾞｰｽのﾘﾝｸ作成

  - ### makeShapeColor

    public static void makeShapeColor(org.apache.poi.xssf.usermodel.XSSFSimpleShape shape, int[] col)
    XSSFSimpleShapeｵﾌﾞｼﾞｪｸﾄにｶﾗｰを設定します。 処理の簡素化のために、col引数が null の場合は、何もせず処理を終了します。 col配列は、[0]:red [1]:blue [2] green です。 ※ ｶﾗｰの設定を、XSSFSimpleShape#setFillColor(int,int,int) で行うと、XSLXﾌｧｲﾙが 壊れるようです。POIが対応できていないのか、ｶﾗｰ化設定方法を間違っているのか…
    パラメータ:
      `shape` - XSSFSimpleShapeｵﾌﾞｼﾞｪｸﾄ
      `col` - 色配列
    変更履歴:
      8.1.0.1 (2022/01/07) ﾃｷｽﾄﾍﾞｰｽのｶﾗｰ作成

  - ### main

    public static void main(String[] args)
    ｱﾌﾟﾘｹｰｼｮﾝのｻﾝﾌﾟﾙです｡ 入力ﾌｧｲﾙ名 は必須で､第一引数固定です｡ 第二引数は､処理方法で､-ALL か､-LINE を指定します｡何も指定しなければ､-ALL です｡ 第三引数を指定した場合は､Encode を指定します｡ Usage: java org.opengion.fukurou.model.POIUtil 入力ﾌｧｲﾙ名 [処理方式] [ｴﾝｺｰﾄﾞ] -A(LL) ･･･ ALL 一括処理(初期値) -L(INE) ･･･ LINE 行単位処理 -S(heet) ･･･ Sheet名一覧 -N(AME) ･･･ NAME:名前定義 -C(ellStyle) ･･･ CellStyle:書式のｽﾀｲﾙ
    パラメータ:
      `args` - ｺﾏﾝﾄﾞ引数配列
    変更履歴:
      6.0.2.0 (2014/09/19) 新規作成, 6.2.3.0 (2015/05/01) ﾊﾟﾗﾒｰﾀ変更､textReader → extractor に変更, 6.2.4.2 (2015/05/29) 引数判定の true/false の処理が逆でした｡, 6.3.9.0 (2015/11/06) Java 8 ﾗﾑﾀﾞ式に変更