org.opengion.fukurou.util

## クラス POIUtil

- java.lang.Object
- - org.opengion.fukurou.util.POIUtil

-     public final class POIUtil
      extends Object

       POI による、Excel/Word/PoworPoint等に対する、ユーティリティクラスです。

       基本的には、ネイティブファイルを読み取り、テキストを取得する機能が主です。
       Excel、Word、PowerPoint、Visio、Publisher からのテキスト取得が可能です。

  変更履歴:

    6.0.2.0 (2014/09/19) 新規作成

  機能分類
    その他
  バージョン
    6.0
  作成者
    Kazuhiko Hasegawa
  導入されたバージョン:
    JDK7.0,

- - ### メソッドのサマリー

    All Methods Static Methods Concrete Methods
    修飾子とタイプ | メソッドと説明
    --- | ---
    `static void` | `activeWorkbook(org.apache.poi.ss.usermodel.Workbook wkbook, boolean isCellDel)` 指定の Workbook の全Sheetを対象に、空行を取り除き、全体をシュリンクします。
    `static void` | `autoCellSize(org.apache.poi.ss.usermodel.Workbook wkbook, int maxColCount, int dataStRow)` 全てのSheetに対して、autoSizeColumn設定を行います。
    `static org.apache.poi.ss.usermodel.Workbook` | `createWorkbook(String fname)` ファイルから、Workbookオブジェクトを新規に作成します。
    `static void` | `excelReader(String fname, ExcelReaderEvent event)` 引数ファイル(Excel)を、テキスト化します。
    `static String` | `getCellMsg(org.apache.poi.ss.usermodel.Cell oCell)` セル情報を返します。
    `static String[]` | `getNames(org.apache.poi.ss.usermodel.Workbook wkbook)` 名前定義一覧を取得します。
    `static String` | `getNumericTypeString(org.apache.poi.ss.usermodel.Cell oCell)` セル値が数字の場合に、数字か日付かを判断して、対応する文字列を返します。
    `static String[]` | `getSheetNames(org.apache.poi.ss.usermodel.Workbook wkbook)` シート一覧を、Workbook から取得します。
    `static String[]` | `getStyleNames(org.apache.poi.ss.usermodel.Workbook wkbook)` 書式のスタイル一覧を取得します。
    `static String` | `getText(String fname)` 引数ファイルを、POITextExtractor を使用してテキスト化します。
    `static String` | `getValue(org.apache.poi.ss.usermodel.Cell oCell)` セルオブジェクト(Cell)から値を取り出します。
    `static int[]` | `kigo2rowCol(String kigo)` Excelの行列記号を、行番号と列番号に分解します。
    `static void` | `main(String[] args)` アプリケーションのサンプルです。
    `static void` | `pptReader(String fname, POIEvent event)` 引数ファイル(PoworPoint)を、HSLFSlideShow を使用してテキスト化します。
    `static void` | `wordReader(String fname, POIEvent event)` 引数ファイル(Word)を、HWPFDocument を使用してテキスト化します。

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

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

- - ### メソッドの詳細

    - #### getText

          public static String getText(String fname)

      引数ファイルを、POITextExtractor を使用してテキスト化します。 Excel、Word、PowerPoint、Visio、Publisher からのテキスト取得が可能です。 拡張子から、ファイルの種類を自動判別します。
      パラメータ:
        `fname` - 入力ファイル名
      戻り値:
        変換後のテキスト
      変更履歴:

        6.0.2.0 (2014/09/19) 新規作成

      このメソッドは、nullを返しません

    - #### wordReader

          public static void wordReader(String fname,
                                        POIEvent event)

      引数ファイル(Word)を、HWPFDocument を使用してテキスト化します。 POIEventは、唯一の void readText( String,String int... ) メソッドを持ち、 処理単位に、このメソッドが呼ばれます。つまり、内部にメモリを溜め込みません。 int...可変長引数は、0:Section番号 1:page番号 2:Paragraph番号 がセットされます。 POIEventは、データとして設定されているレコードのみCallされます。
      パラメータ:
        `fname` - 入力ファイル名
        `event` - イベント処理させるI/F
      変更履歴:

        6.0.2.0 (2014/09/19) 新規作成

    - #### pptReader

          public static void pptReader(String fname,
                                       POIEvent event)

      引数ファイル(PoworPoint)を、HSLFSlideShow を使用してテキスト化します。 POIEventは、唯一の void readText( String,String int... ) メソッドを持ち、 処理単位に、このメソッドが呼ばれます。つまり、内部にメモリを溜め込みません。 int...可変長引数は、0:Slide番号 1:TextRun番号 がセットされます。 POIEventは、データとして設定されているレコードのみCallされます。
      パラメータ:
        `fname` - 入力ファイル名
        `event` - イベント処理させるI/F
      変更履歴:

        6.0.2.0 (2014/09/19) 新規作成

    - #### excelReader

          public static void excelReader(String fname,
                                         ExcelReaderEvent event)

      引数ファイル(Excel)を、テキスト化します。 ExcelReaderEvent のサブクラスを与えることで、EXCELデータをテキスト化できます。 ここでは、XSSF(.xlsx)形式と、HSSF(.xls)形式で、処理を分けます。 どちらも、イベントモデルでEXCELファイルを処理します。 SS(.xlsx/.xls)では、巨大なXSSF(.xlsx) ファイルでは、OutOfMemoryエラーが発生します。
      パラメータ:
        `fname` - 入力ファイル名
        `event` - イベントオブジェクト(ExcelReaderEvent)
      関連項目:
        `ExcelModel`, `ExcelReader_HSSF`, `ExcelReader_XSSF`
      変更履歴:

        6.0.2.0 (2014/09/19) 新規作成
        6.0.3.0 (2014/11/13) 引数を POIEvent → ExcelReaderEvent に変更
        6.2.0.0 (2015/01/30) staticメソッドをインスタンスメソッドに変更。

    - #### 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型の数字で表します。
      パラメータ:
        `kigo` - Excelの行列記号( A1 , B5 , AA23 など )
      戻り値:
        行と列の番号を持った配列([0]=行=ROW , [1]=列=COL)
      変更履歴:

        6.0.3.0 (2014/11/13) 新規作成

      このメソッドは、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 しない。

    - #### 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 を利用するように修正します。

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

    - #### 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:行わない)
      変更履歴:

        6.0.2.0 (2014/09/19) 新規作成
        6.0.2.3 (2014/10/10) CellStyle の有無も判定基準に含めます。
        6.0.2.5 (2014/10/31) Cellの開始、終了番号が、マイナスのケースの対応

    - #### createWorkbook

          public static org.apache.poi.ss.usermodel.Workbook createWorkbook(String fname)

      ファイルから、Workbookオブジェクトを新規に作成します。
      パラメータ:
        `fname` - 入力ファイル
      戻り値:
        Workbookオブジェクト
      変更履歴:

        6.0.2.3 (2014/10/10) 新規作成

      このメソッドは、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) 新規作成

      このメソッドは、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) セル情報を作成する時に、値もセットします。

    - #### main

          public static void main(String[] args)

      アプリケーションのサンプルです。 入力ファイル名 は必須で、第一引数固定です。 第二引数は、処理方法で、指定しない場合は、-ALL として処理します。 Usage: java org.opengion.fukurou.util.POIUtil 入力ファイル名 [パラメータ] -A(LL) ･･･ ALL 一括処理(初期値) -W(ORD) ･･･ Word -P(PT) ･･･ PoworPoint -E(XCEL) ･･･ Excel -S(heet) ･･･ Sheet名一覧 -N(AME) ･･･ NAME:名前定義 -C(ellStyle) ･･･ CellStyle:書式のスタイル
      パラメータ:
        `args` - コマンド引数配列
      変更履歴:

        6.0.2.0 (2014/09/19) 新規作成

Webアプリケーションフレームワーク openGion
Copyright (c) 2009 The openGion Project.