ExcelPOIInput - Excelからの入力(POIバージョン)

Excelファイルからセルのデータを読み込み、ストリームまたはプロパティに出力します。本コンポーネントでは、フロー実行時に、次のようなことができます。 ExcelInputコンポーネントと同様の処理をApache POIを使用して実現しています。
このコンポーネントを使用するには、Excelビルダーを起動して、テンプレートとするExcelファイルを読み込み、ワークブック上のセルをコンポーネントのフィールド定義と関連づける必要があります。
詳細についてはExcelInputコンポーネントの「Excelビルダーの使い方」を参照してください。

■ストリーム情報

入力フォーマットBinary
接続数1
説明読み込むExcelファイルのバイナリイメージ。
出力フォーマットRecord
説明 Excelファイル中の、Excelビルダーで定義したレコード領域の内容。
レコード領域が複数定義されている場合には、その数だけ出力ストリームが表示され、レコードの名前が各ストリームの名前となります。
フィールド名の定義はExcelビルダー上で行い、フローデザイナー上では変更できません。
String型で定義されたフィールドについて、対応するエクセルのセルが数値の場合、セル書式を適用した文字列、つまりエクセルで表示される文字列と同等の文字列が読み込まれます。

■コンポーネントプロパティ

名前プロパティ型マッピング説明
空レコードを無視boolean入力&出力 空行の扱いを指定します。
はい [true] - レコードとして定義した領域中の空行を無視して読み込みます。
いいえ [false] - 空行はすべてのフィールドが空のレコードとして読み込みます。
計算結果の丸め処理boolean- ワークブックに保存されている計算結果に丸め処理を行うかどうかを指定します。
エクセルは計算結果が数値である場合、64ビットの浮動小数点バイナリ値としてワークブックに保存しています。このため、計算結果によっては10進数で演算した値に誤差が生じる場合があります。
(例) 350 * 0.7 = 244.99999999999997
このような場合、エクセルは有効数字15桁までしか表示しないため、セル上には245と表示されます。計算結果の丸め処理を「はい」にすると、本コンポーネントの取得する値は、セル上に表示される値(表示桁数を最大にした場合)と同じになります。いいえにすると、本コンポーネントは、エクセルが内部的に保持する値をそのまま取得します。
はい [true] - 有効桁数15桁として丸め処理を行う
いいえ [false] - 丸め処理を行わない
結合セルの値choice- 値を読み込むセルが結合セルであった場合の扱いを指定します。
左上セルの値 [parent] - 結合セルの左上の値を読み込みます。
対象セルの値 [original] - 読み込み対象のセルの値をそのまま読み込みます。この場合結合セル領域の左上以外のセルでは空白が読み込まれます。
シートがない場合choice- 読み込むワークシートが存在しない場合の処理方法を指定します。
処理続行 [Continue] - そのまま読み込み処理を続行します。存在しないシートからレコード領域を読み込もうとした場合、空レコードとなります。単一セルの場合、null値が読み込まれます
エラーにする [Exception] - エラーを発生します
ループを開始loopProcess- Excelビルダーで定義したレコード領域の複数レコードをまとめて出力するか1レコードずつループして出力するか選択します。
はい [true] - ループの起点となって1レコードずつストリームに出力します。
いいえ [false] - すべてのレコードがまとめてストリームに出力します。
シートcategory入力&出力 Excelビルダーで単一セル・レコードを定義したときのシート名が「定義上のシート名」にリストされます。各シートに対応する「読み込むシート名」に値を指定すると、定義したときのシート名に置き換えて、このシート名のセルからデータを読み込みます。
このプロパティはマッパーで値を変更可能なので、入力するシートをフロー中で動的に選択することができます。
単一セルcategory入力    Excelファイル中の、Excelビルダーで定義した単一セル領域です。フロー実行時に、対応するセルのデータがこのプロパティに読み込まれます。また、このプロパティは自動的にストリーム変数になります。本コンポーネントの後に連結したマッパーで、ストリーム変数として見えるようになっています。ストリーム変数については、「はじめに」-「詳細なトピック」-「フローの構成要素」-「変数」-「ストリーム変数」を参照してください。
フィールド名の定義はExcelビルダー上で行い、フローデザイナー上では変更できません。
String型で定義されたフィールドについて、対応するエクセルのセルが数値の場合、セル書式を適用した文字列、つまりエクセルで表示される文字列と同等の文字列が読み込まれます。

■ループ処理

Excelビルダーで定義したレコード領域に複数レコードが存在し、ループを開始が「はい」の場合にループの起点となります。

■トランザクション処理

コミット何もしません。
ロールバック何もしません。

■エラー処理

タイプパラ
メータ
エラー処理フロー
へのストリーム
エラー
コード
説明
汎用 なし コンポーネントの入力ストリーム なし Excelビルダーで定義したセルから読み込めない場合
なし フローのフィールド型への変換エラーが発生した場合
なし サポートされない形式のExcelファイルを開こうとした場合。
Excel97より古い形式のExcelファイルは、Excel97以降の形式で保存し直す必要があります。

■制限事項

読み込み可能なファイルについて

読み込み可能なファイルは、使用しているPOIのライブラリに準じます。
Excel97以降の形式のExcelファイル、Excel2007より追加されたxlsx形式のファイルに対応しています。
1ファイルで最大30MBまでの読み込みについて動作を確認しています。

値の型セル数の目安
数値180万セル
文字列120万セル(4バイト、全角2文字程度の場合)
30万セル(80バイト、全角40文字程度の場合)
3600セル(8Kバイト、全角4096文字程度の場合)
Excelフォーマットでは1セルごとに10バイトから20バイト程度の付加情報があるため読み込むデータ量に比較してセル数は減少します。

■String型で取得した場合のセルの値について

レコード領域、セル領域において、String型で定義されたフィールドについて、対応するセルが数値の場合、セル書式を適用した文字列、つまりエクセルで表示されるものと同等の文字列が読み込まれます。たとえば、通貨US$・小数2桁の書式を指定したセルに123が入力されている場合、ExcelPOIInputでString型を指定すると、"US$123.00" という文字列が取得されます。Integer型やDouble型などの数値型を指定すると、123という値が取得されます。
電話番号や郵便番号などの特殊なセル書式の場合には、正しい文字列が取得できないことがあります。

■結合セルについて

本コンポーネントで、結合セルから値または書式情報を読み込む場合、結合セル範囲の左上のアドレスを指定してください。
たとえば、単一セルの場合、結合セルC3:D5からデータを読み込む場合、C3を指定します。
レコード領域の場合も同様に、1レコード1行の場合であれば、結合セルの一番左のフィールドから、1レコード複数行の場合であれば、結合セルの一番左上のフィールドから読み込むようにします。

■エクセルの計算誤差について

計算結果の丸め処理を「はい」にすると、エクセルの表示する計算結果と同じ値が得られますが、これは計算結果の内部表現値とは異なるため、注意が必要です。
たとえば、

  セルA1: 350
  セルA2: =A1*0.7
  セルA3: =A2-244
となっていた場合、書式設定で小数点以下15桁を表示するようにすれば、エクセル上でも、
  セルA1: 350.000000000000000
  セルA2: 245.000000000000000
  セルA3:    0.999999999999972
のようにA3では計算誤差が表示上にも現われます。
一方、本コンポーネントの計算結果の丸め処理を「はい」にし、セルA2の値を取得すると245になるので、この値からマッパーで244を引くと、1となり、セルA3とは異なる値になってしまいます。
つまり、計算結果の丸め処理を「はい」にした場合は、丸め誤差の発生したセルの値に対して、エクセルと本コンポーネントで同じ計算を行うと、計算結果が異なることがあり得るということになります。この点に十分留意して計算結果の丸め処理をご使用ください。

■日付セルの扱いについて

エクセルでは、日付/時刻形式の書式設定が行われているセルに保持されている実際の値は、1900年1月1日を1とし、以降24時間ごとに1を加算する浮動小数値となります。ExcelInputコンポーネントおよびExcelSlimIntputコンポーネントでこのようなセルの値を読み込む場合、DateTime型やDouble型として読み込む場合は結果が同一になりますが、String型をして読み込む場合は結果が異なります。ExcelInputコンポーネントでは上記浮動小数値をString型に変換した文字列になるのに対して、ExcelSlimIntputコンポーネントではフローサービスのDateTime型をString型に変換した文字列になります。これは各コンポーネントが使用する外部ライブラリの日付/時刻セルの扱いに違いがあることに起因するものです。
本コンポーネントではこのようなセルはDateTime型として読み込んで使用されることを推奨します。

■色名称文字列

本コンポーネントでエクセルファイルの書式情報から入出力に使用されるのはxlsの場合は色名称文字列、xlsxの場合はRGB16進数値になります。
色名称文字列はエクセルの標準色パレットに基づくものです。ユーザ定義のパレットはサポートされません。
書き込み時に大文字小文字は区別されません。読み込み時には小文字の名称となります。
名称色見本RGB16進数値
aqua 33cccc
black 000000
blue 0000ff
blue gray 666699
bright green 00ff00
brown 993300
coral ff8080
dark blue 000080
dark green 003300
dark purple 660066
dark red 800000
dark teal 003366
dark yellow 808000
gold ffcc00
gray 25% c0c0c0
gray 40% 969696
gray 50% 808080
gray 80% 333333
green 008000
ice blue ccccff
indigo 333399
ivory ffffcc
lavender cc99ff
light blue 3366ff
light green ccffcc
light orange ff9900
light turquoise ccffff
light yellow ffff99
lime 99cc00
ocean blue 0066cc
olive green 333300
orange ff6600
pale blue 99ccff
periwinkle 9999ff
pink ff00ff
plum 993366
red ff0000
rose ff99cc
sea green 339966
sky blue 00ccff
tan ffcc99
teal 008080
teal 008080
turquoise 00ffff
violet 800080
white ffffff
yellow ffff00