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

Excelファイルからセルのデータを読み込み、ストリームまたはプロパティに出力します。本コンポーネントでは、フロー実行時に、次のようなことができます。 このコンポーネントではExcelの処理にApache POIを使用しています。
このコンポーネントを使用するには、Excelビルダーを起動して、テンプレートとするExcelファイルを読み込み、ワークブック上のセルをコンポーネントのフィールド定義と関連づける必要があります。
詳細については下記トピック「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, xlsm形式のファイルに対応しています。

ブックの保護が設定されたExcelファイルを読み込むことはできますが、パスワードで保護された場合は読み込むことができません。

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進数値になります。ただし、ExcelPOIOutputで生成時に色名称をわたして作成したxlsxファイルのような場合、xlsxでも色名称文字列が使用されることがあります。
色名称文字列はエクセルの標準色パレットに基づくものです。ユーザ定義のパレットはサポートされません。
書き込み時に大文字小文字は区別されません。読み込み時には小文字の名称となります。
名称色見本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
turquoise 00ffff
violet 800080
white ffffff
yellow ffff00

■Excelビルダーの使い方

●Excelを使用するフローの開発手順

ExcelPOIInputコンポーネントを使ってExcelファイルを生成するフローを作成するには、次のような手順を用います。

ExcelPOIInputコンポーネントでは、読み込んだExcelワークシートの対応するセルのデータがコンポーネントプロパティの「単一セル」タブに、レコード領域のデータがコンポーネントのストリームペインに取得されます。ExcelPOIInputコンポーネントの直後にMapperコンポーネントを配置することで、これらのデータを動的に扱うことができます。

  1. フロー内にExcelPOIInputコンポーネントを配置し、ExcelワークシートファイルをBinaryの入力ストリームとして渡す。
  2. ExcelPOIInputコンポーネントでExcelビルダーを起動する。Excelビルダーでは、テンプレートとなるExcelワークシートファイルから、データを取得したいセルやレコード範囲をマウスで指定する。
  3. ExcelPOIInputコンポーネントのコンポーネントプロパティの「単一セル」タブに表示された単一データのデータ型を設定する。
  4. ExcelPOIInputコンポーネントのストリームペインに表示されたレコードデータのデータ型を設定する。

●Excelビルダーの起動

Excelビルダーは、Excel2003-2013上で動作するアドオンソフトウェアで、利用するには前記バージョンのMicrosoft Excelがあらかじめインストールされている必要があります。またマクロとして動作するため、Excel上でマクロの実行権限を「中」以下に設定する必要があります。

Excelビルダーを起動するには以下の手順で行います。

  1. Excelビルダーは、ExcelPOIInputコンポーネントを右クリックして表示されるメニューの「Excelビルダー」をクリックするか、またはExcelPOIInputコンポーネントをダブルクリックします。
  2. Excelビルダーを起動させるメニューを実行すると、Microsoft Excelが起動します。このExcelには、「Infoteria ExcelBuilder」マクロアイコンが含まれています。
  3. データの入出力を行うためのテンプレートとなる任意のExcelワークシートを開きます。
  4. ExcelビルダーアイコンをクリックしてExcelビルダーダイアログボックスを表示させます。

●「単一セル」

単一セルタブは、セル単位でデータの入力を行うために、対象となるセルの設定を行います。Excelビルダーでは、これらのプロパティ、ストリームと、ワークシート上のセル領域との関連づけを行うことができます。単一セルを設定するには、「単一セル」タブを使用します。

追加

単一セル定義を追加します。「追加」ボタンをクリックすると、範囲指定のダイアログが表示されるので、Excelのワークシート上で単一のセルをポイントするか、セル位置を入力して、「OK」をクリックします。

続いて、項目入力のダイアログが表示されるので、項目名を入力し、「OK」をクリックします。この項目名はExcelコンポーネントの単一セルプロパティにおけるフィールド名になります。データの入力に結び付けたいセルの個数分、上記作業を繰り返します。追加されたセル定義は、「単一セル」タブに一覧表示されます。

変更

選択した単一セル定義を変更します。「変更」ボタンをクリックすると、範囲指定のダイアログが表示されるので、変更する場合は新しい値を入力します。変更しない場合はそのまま「OK」をクリックします。

続いて、項目入力のダイアログが表示されるので、変更する場合は新しい値を入力し、「OK」をクリックします。途中で「キャンセル」をクリックすると、セル定義は変更されません。

削除

選択した単一セル定義を削除します。削除したい単一セル定義を選択し、「削除」ボタンをクリックすると、項目が削除されます。

書式情報の設定

選択した単一セル定義について、どの書式情報を入力対象とするか設定できます。書式を読み込みたい単一セル定義を選択し、画面右側の「入力対象書式」ボックスから読み込みたい書式情報のチェックボックスをONにします。
入力対象とした書式情報は、単一セルの項目名の後ろに以下のような文字列を付加した形で、単一セルプロパティにおけるフィールド名になります。

  背景色         : [項目名]_Background
  文字色         : [項目名]_FontColor
  文字フォント   : [項目名]_FontName
  文字サイズ     : [項目名]_FontSize
  文字スタイル   : [項目名]_FontStyle
  取消線         : [項目名]_StruckOut
  下線           : [項目名]_UnderlineStyle
  表示形式       : [項目名]_Format
  計算式         : [項目名]_Formula
  コメント       : [項目名]_Comment
  ハイパーリンク : [項目名]_Hyperlink

●「レコード」の設定

レコードタブは、レコード単位でデータの入力を行うために、対象となるレコード領域の設定を行います。レコード形式の繰り返しデータをExcelから読み込むには、レコード領域を設定します。レコード領域の設定には「レコード」タブを使用します。
レコード領域は複数設定することが可能です。レコード領域を複数設定すると、レコードの数だけExcelPOIInputコンポーネントの出力コネクタが増やされ、ストリームペインにフィールド定義が追加されます。
1レコードが複数行にわたるレコード領域も定義できます。その場合、レコード領域全体の行数が1レコードあたりの行数の整数倍になるように設定してください。

追加

レコード領域の定義を追加します。「追加」ボタンをクリックすると、範囲指定のダイアログが表示されるので、Excelのワークシート上で矩形領域を指定するか、セル領域を入力して、「OK」をクリックします。

続いて、レコード名入力のダイアログが表示されるので、レコード名を入力し、「OK」をクリックします。

次に、1レコードあたりの行数の入力ダイアログが表示されるので、1レコード複数行の場合は適宜変更し、「OK」をクリックします。レコード範囲として設定した領域が登録されます。

変更

選択したレコード領域の定義を変更します。「変更」ボタンをクリックすると、範囲指定のダイアログが表示されるので、変更する場合は新しい値を入力します。変更しない場合はそのまま「OK」をクリックします。

続いて、レコード名入力のダイアログが表示されるので、変更する場合は新しい値を入力し、「OK」をクリックします。途中で「キャンセル」をクリックすると、レコード領域の定義は変更されません。

次に、1レコードあたりの行数の入力ダイアログが表示されるので、変更する場合は新しい値を入力し、「OK」をクリックします。

削除

選択したレコード領域の定義を削除します。削除したいレコード領域の定義を選択し、「削除」ボタンをクリックすると、レコード領域の定義が削除されます。

レコードフィールド領域

レコード内のフィールド名を定義します。レコード領域の定義を選択すると、レコードフィールド領域にフィールドの「列(カラム)」と「行(ロー)」と「フィールド名」が表示されます。「行」は1レコードあたり複数行の場合のみ表示されます。フィールド名はExcelPOIInputコンポーネントの出力ストリームにおけるフィールド名となります。初期状態ではフィールド名は「列」と「行」を組み合わせた文字列となります。

変更

フィールド名を変更したい場合は、フィールドを選択して「変更」ボタンをクリックします。フィールド名を入力するダイアログが表示されるので、新しい値を入力し、「OK」をクリックします。「キャンセル」をクリックするとフィールド名は変更されません。
続いて、「終了条件を設定しますか?」とダイアログが表示されるので、レコードの終了条件を設定する場合は「はい」をクリックし、終了条件とする文字列を入力します。

フィールド名取得

ワークシート上の指定範囲からフィールド名となる文字列を一括して取得します。「フィールド名取得」ボタンをクリックすると、範囲指定のダイアログが表示されるので、フィールド名を含むセル領域を指定します。指定する領域は、1レコードあたり列数・行数に一致した大きさでなければなりません。デフォルトでは、レコード領域のすぐ上側の領域が選択されて表示されます。
指定された領域中で空のセルがある場合、対応するフィールド名は変更されません。また、改行文字を含むセルの場合は、改行文字をすべて取り除いた文字列がフィールド名に設定されます。

レコードの終了条件

ExcelPOIInputコンポーネントから起動されるExcelビルダーでは、レコードの終了条件を設定することができます。Excelビルダーでは、レコードとして取得する行列範囲をあらかじめレコード範囲として設定しますが、実際のフローが実行されたときに、必ずしもこのレコード範囲内が全てレコードで埋まっているとは限りません。そのような場合、特定の列にレコードの終了を表す文字列(例:EOR等)を記述しておくことで、適切な行数のレコードを取得することができます。終了条件を空文字列("")にした場合、この列が空データの時、レコードは終了しているとみなされます。

書式情報の設定

各フィールドについて、どの書式情報を入力対象とするか設定できます。書式を読み込みたいフィールドを選択し、画面右側の「入力対象書式」ボックスから読み込みたい書式情報のチェックボックスをONにします。
入力対象とした書式情報は、フィールド名の後ろに以下のような文字列を付加した形で、出力ストリームにおけるフィールド名になります。

  背景色         : [フィールド名]_Background
  文字色         : [フィールド名]_FontColor
  文字フォント   : [フィールド名]_FontName
  文字サイズ     : [フィールド名]_FontSize
  文字スタイル   : [フィールド名]_FontStyle
  取消線         : [フィールド名]_StruckOut
  下線           : [フィールド名]_UnderlineStyle
  表示形式       : [フィールド名]_Format
  計算式         : [フィールド名]_Formula
  コメント       : [フィールド名]_Comment
  ハイパーリンク : [フィールド名]_Hyperlink

●書式情報

単一セルの各項目、レコードの各レコードフィールドについて、書式情報を読み込むように設定した場合、実際にエクセルファイルから読み込まれる値は次のようになります。

●Excelビルダーの終了

設定を完了したら、Excelビルダーの「登録」ボタンをクリックして設定情報を登録し、Excelビルダーを終了します。

登録

設定情報を登録します。「登録」ボタンをクリックすると、設定情報が登録され、Excelビルダーを終了します。

閉じる

Excelビルダーを終了します。「閉じる」ボタンをクリックすると、設定情報は登録されずに、Excelビルダーを終了します。Excelビルダーを終了後、さらにExcelを終了させると、フローデザイナーに戻ります。

●Excelコンポーネントのインスペクタ

Excelビルダーによってセルやレコードが定義され、登録されるとExcelコンポーネントのインスペクタ上のシートタブ、単一セルタブ、ストリームペインに設定された情報が登録されます。これらのデータはExcelコンポーネントにMapperコンポーネントを接続することでフロー内で変更が可能です。