パッケージ 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`
  POI対象ｻﾌｨｯｸｽ "ppt,pptx,doc,docx,xls,xlsx,xlsm"
  `static final String`
  `TXT_SUFIX`
  ﾃｷｽﾄ対象ｻﾌｨｯｸｽ "txt,csv,jsp,java,html,xml,css,js,json,py"

- ## メソッドの概要

  修飾子とタイプ
  メソッド
  説明
  `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 boolean`
  `isReadText(File file)`
  引数ﾌｧｲﾙが､textReader の読み取り対象となる拡張子ﾌｧｲﾙかどうかを判定します｡ ﾌｧｲﾙの拡張子が "ppt,pptx,doc,docx,xls,xlsx,xlsm"、"txt,csv,jsp,java,html,xml,css,js,json,py"、pdf の場合､true を返します｡
  `static boolean`
  `isText(File file)`
  引数ﾌｧｲﾙが､処理対象となるﾃｷｽﾄ関連の拡張子ﾌｧｲﾙかどうかを判定します｡ ﾌｧｲﾙの拡張子が､"txt,csv,jsp,java,html,xml,css,js,json,py" の場合､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`
  `pdfReader1(File file, TextConverter<String,String> conv)`
  引数ﾌｧｲﾙ(PDF)を､ﾃｷｽﾄ化します｡ 引数ﾌｧｲﾙ(PDF)を､pdfbox を使用してﾃｷｽﾄ化します。
  `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
    POI対象ｻﾌｨｯｸｽ "ppt,pptx,doc,docx,xls,xlsx,xlsm"
    関連項目:
      - 定数フィールド値

  - ### TXT_SUFIX

    public static final String TXT_SUFIX
    ﾃｷｽﾄ対象ｻﾌｨｯｸｽ "txt,csv,jsp,java,html,xml,css,js,json,py"
    関連項目:
      - 定数フィールド値

- ## メソッドの詳細

  - ### 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関連の拡張子ﾌｧｲﾙかどうかを判定

  - ### isText

    public static boolean isText(File file)
    引数ﾌｧｲﾙが､処理対象となるﾃｷｽﾄ関連の拡張子ﾌｧｲﾙかどうかを判定します｡ ﾌｧｲﾙの拡張子が､"txt,csv,jsp,java,html,xml,css,js,json,py" の場合､true を返します｡
    パラメータ:
      `file` - 判定するﾌｧｲﾙ
    戻り値:
      ﾃｷｽﾄ関連の拡張子の場合､true
    変更履歴:
      8.5.0.0 (2023/04/21) 新規追加

  - ### isReadText

    public static boolean isReadText(File file)
    引数ﾌｧｲﾙが､textReader の読み取り対象となる拡張子ﾌｧｲﾙかどうかを判定します｡ ﾌｧｲﾙの拡張子が "ppt,pptx,doc,docx,xls,xlsx,xlsm"、"txt,csv,jsp,java,html,xml,css,js,json,py"、pdf の場合､true を返します｡
    パラメータ:
      `file` - 判定するﾌｧｲﾙ
    戻り値:
      ﾃｷｽﾄ関連の拡張子の場合､true
    変更履歴:
      8.5.0.0 (2023/05/12) 新規追加

  - ### 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 で処理します｡, 8.5.0.0 (2023/04/21) txt,csv,jsp,java,xml,css,js は、UTF-8 固定で、textReader を呼び出す。, 8.5.0.0 (2023/05/12) pdfReader1 追加

  - ### 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 ﾗﾑﾀﾞ式に変更

  - ### pdfReader1

    public static void pdfReader1(File file, TextConverter<String,String> conv)
    引数ﾌｧｲﾙ(PDF)を､ﾃｷｽﾄ化します｡ 引数ﾌｧｲﾙ(PDF)を､pdfbox を使用してﾃｷｽﾄ化します。
    パラメータ:
      `file` - 入力ﾌｧｲﾙ
      `conv` - ｲﾍﾞﾝﾄ処理させるI/F
    変更履歴:
      8.5.0.0 (2023/05/12) pdfReader1 追加

  - ### 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) 計算式の計算を行う。, 8.5.0.0 (2023/04/21) ｾﾙﾌｫｰﾏｯﾄ処理ｴﾗｰ時には、ｽﾀｯｸﾄﾚｰｽは出さずに計算式を返す。

  - ### 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 ﾗﾑﾀﾞ式に変更