public class ReadXls extends java.lang.Object implements InvalidCellInfoCollector
Excel ファイルをデータ入力用のファイル形式として使用するための機能を 実装している。
使用方法は、
readInputStream(InputStream, LocaleInfo, XlsHandler, boolean, String, List, HeaderCallable, boolean, int, Breaker, List, DetailCallable, int, Hashtable, List, List, InvalidCellInfoCollector)
で一度のメソッド呼び出しでヘッダと明細を読み込む。
createXlsReader(InputStream, XlsHandler, boolean)
か
createXlsReader(InputStream, LocaleInfo, XlsHandler, boolean)
で ReadXls インスタンスを生成し、
parse(Hashtable, List, List)
でヘッダと明細それぞれを読み込む。
close()
で ReadXls インスタンスに保持しているリソースを解放する。
ReturnCode.NORMAL
でなければ、読み込みエラーに応じた処理を行う。
ReturnCode.FOUND_INVALID_CELLS
が返された場合、不正データ情報リスト List<InvalidCellInfo>
から不正な入力がされているセルの情報を取得する。
入力値 = 明細情報リスト.get(行番号 - 1).get(列番号 - 1)
修飾子とタイプ | フィールドと説明 |
---|---|
private Breaker |
breaker
属性.
|
private DetailCallable |
detailCallable
リソース.
|
private java.util.List<DetailDefine> |
detailDefines
属性.
|
static java.lang.String |
EMPTY_VALUE
定数.
|
private int |
firstDetailRowNo
属性.
|
private int |
foundInvalidCellNum
リソース.
|
private HeaderCallable |
headerCallable
リソース.
|
private java.util.List<HeaderDefine> |
headerDefines
属性.
|
private InvalidCellInfoCollector |
invalidCellInfoCollector
リソース.
|
private java.util.List<InvalidCellInfo> |
invalidCellInfos
リソース.
|
private java.io.InputStream |
is
リソース.
|
private boolean |
isOOXML
リソース.
|
private int |
lastReadRowNo
リソース.
|
private LocaleInfo |
localeInfo
リソース.
|
private int |
maxInvalidCellNum
リソース.
|
private int |
readableRowNum
リソース.
|
private java.lang.String |
sheetName
属性.
|
private boolean |
stopWhenHeaderHasInvalidValue
属性.
|
private XlsHandler |
xlsHandler
リソース.
|
コンストラクタと説明 |
---|
ReadXls() |
修飾子とタイプ | メソッドと説明 |
---|---|
private int |
addValue(java.util.List<CellDefine> cds,
int startIdx,
int limitIdx,
int rno,
int cno,
java.util.List<java.lang.String> values,
int breakRowNo,
int breakCokumnNo)
ユーティリティ.
|
private void |
checkFoundInvalidCellNum()
ユーティリティ.
|
void |
close()
機能.
|
static ReadXls |
createXlsReader(java.io.InputStream is,
LocaleInfo localeInfo,
XlsHandler xlsHandler,
boolean isOOXML)
機能.
|
static ReadXls |
createXlsReader(java.io.InputStream is,
XlsHandler xlsHandler,
boolean isOOXML)
機能.
|
private void |
fillEmptyCell(int cno,
int nextCno,
java.util.List<java.lang.String> values)
ユーティリティ.
|
Breaker |
getBreaker()
getter/setter.
|
private void |
getCell(int rowNo,
int columnNo,
int breakRowNo,
int breakCokumnNo)
ユーティリティ.
|
DetailCallable |
getDetailCallable()
getter/setter.
|
java.util.List<DetailDefine> |
getDetailDefines()
getter/setter.
|
int |
getFirstDetailRowNo()
getter/setter.
|
private int |
getFoundInvalidCellNum()
getter/setter.
|
HeaderCallable |
getHeaderCallable()
getter/setter.
|
java.util.List<HeaderDefine> |
getHeaderDefines()
getter/setter.
|
InvalidCellInfoCollector |
getInvalidCellInfoCollector()
getter/setter.
|
private java.util.List<InvalidCellInfo> |
getInvalidCellInfos()
getter/setter.
|
private java.io.InputStream |
getIs()
gettar/setter.
|
private int |
getLastReadRowNo()
getter/setter.
|
LocaleInfo |
getLocaleInfo()
getter/setter.
|
int |
getMaxInvalidCellNum()
getter/setter.
|
private int |
getReadableRowNum()
getter/setter.
|
java.lang.String |
getSheetName()
getter/setter.
|
private java.lang.String |
getValue(CellDefine cd,
int rowNo,
int columnNo,
int breakRowNo,
int breakCokumnNo)
ユーティリティ.
|
private java.lang.String |
getValueForHeader(CellDefine cd,
int rowNo,
int columnNo)
ユーティリティ.
|
private XlsHandler |
getXlsHandler()
getter/setter.
|
private boolean |
isOOXML()
getter/setter.
|
boolean |
isStopWhenHeaderHasInvalidValue()
getter/setter.
|
private boolean |
isValidDetailDefines()
ユーティリティ.
|
private boolean |
isValidHeaderDefines()
ユーティリティ.
|
void |
notifyInvalidCellInfo(int rowNo,
int columnNo,
CellDefine cellDefine,
CellTypeDefine cellType,
java.lang.String messageId)
不正データ通知.
|
ReturnCode |
parse(java.util.Hashtable<java.lang.String,java.lang.String> headers,
java.util.List<java.util.List<java.lang.String>> details,
java.util.List<InvalidCellInfo> invalidCellInfos)
機能.
|
private void |
readDetails(java.util.List<java.util.List<java.lang.String>> details)
ユーティリティ.
|
private void |
readHeaders(java.util.Hashtable<java.lang.String,java.lang.String> header)
ユーティリティ.
|
static ReturnCode |
readInputStream(java.io.InputStream is,
LocaleInfo localeInfo,
XlsHandler xlsHandler,
boolean isOOXML,
java.lang.String sheetName,
java.util.List<HeaderDefine> headerDefines,
HeaderCallable headerCallable,
boolean stopWhenHeaderHasInvalidValue,
int firstDetailRowNo,
Breaker breaker,
java.util.List<DetailDefine> detailDefines,
DetailCallable detailCallable,
int maxInvalidCellNum,
java.util.Hashtable<java.lang.String,java.lang.String> headers,
java.util.List<java.util.List<java.lang.String>> details,
java.util.List<InvalidCellInfo> invalidCellInfos,
InvalidCellInfoCollector invalidCellInfoCollector)
機能.
|
void |
setBreaker(Breaker breaker)
getter/setter.
|
void |
setDetailCallable(DetailCallable detailCallable)
getter/setter.
|
void |
setDetailDefines(java.util.List<DetailDefine> detailDefines)
getter/setter.
|
void |
setFirstDetailRowNo(int firstDetailRowNo)
getter/setter.
|
private void |
setFoundInvalidCellNum(int foundInvalidCellNum)
getter/setter.
|
void |
setHeaderCallable(HeaderCallable headerCallable)
getter/setter.
|
void |
setHeaderDefines(java.util.List<HeaderDefine> headerDefines)
getter/setter.
|
void |
setInvalidCellInfoCollector(InvalidCellInfoCollector invalidCellInfoCollector)
getter/setter.
|
private void |
setInvalidCellInfos(java.util.List<InvalidCellInfo> invalidCellInfos)
getter/setter.
|
private void |
setIs(java.io.InputStream is)
getter/setter.
|
private void |
setLastReadRowNo(int lastReadRowNo)
getter/setter.
|
private void |
setLocaleInfo(LocaleInfo localeInfo)
getter/setter.
|
void |
setMaxInvalidCellNum(int maxInvalidCellNum)
getter/setter.
|
private void |
setOOXML(boolean isOOXML)
getter/setter.
|
private void |
setReadableRowNum(int readableRowNum)
getter/setter.
|
void |
setSheetName(java.lang.String sheetName)
getter/setter.
|
void |
setStopWhenHeaderHasInvalidValue(boolean stopWhenHeaderHasInvalidValue)
getter/setter.
|
private void |
setXlsHandler(XlsHandler xlsHandler)
getter/setter.
|
public static final java.lang.String EMPTY_VALUE
空セルの値 ("")
private java.io.InputStream is
Excel ファイルの入力元ストリーム。
private LocaleInfo localeInfo
ロケール情報。
private XlsHandler xlsHandler
依存ライブラリを使用する Excel ファイル読み込みハンドラ。
private boolean isOOXML
Excel ファイルが Office Open XML 形式 (Excel2007 以降) であるか否かを示す。
private java.util.List<InvalidCellInfo> invalidCellInfos
不正データ情報を出力するリスト。
private int foundInvalidCellNum
不正データ情報を検知した数。
private int maxInvalidCellNum
不正データを検知する最大数。
検知した不正でー多数がこの最大数になったら読み込み処理は中断する。
private InvalidCellInfoCollector invalidCellInfoCollector
不正データを検知した際に、そのセルの不正データ情報を通知する先。
private int readableRowNum
シートから読み込める行の行数。
private int lastReadRowNo
最後に読み込んだ行の行番号 (1~)
private HeaderCallable headerCallable
読み込んだヘッダ情報のコールバック
private DetailCallable detailCallable
一件分の明細情報を読み込むたびに呼び出すコールバック
private java.lang.String sheetName
読み込むシートの名称。
private java.util.List<HeaderDefine> headerDefines
ヘッダ情報を読み込むセルそれぞれの項目定義
HeaderDefine
のリスト。
private boolean stopWhenHeaderHasInvalidValue
ヘッダ情報を読み込んだ際に不正データが検知された場合に、 読み込み処理を停止するならば true を、明細部の読み込みを行うならば false を指定する。
private int firstDetailRowNo
明細行を読み込む歳帆の行番号 (1~)。
private java.util.List<DetailDefine> detailDefines
明細を構成する行それぞれの項目定義
DetailDefine
のリスト。
private java.io.InputStream getIs()
is
を返す。private void setIs(java.io.InputStream is)
is
- is
に指定する Excel ファイルの入力元ストリーム。public final LocaleInfo getLocaleInfo()
localeInfo
を返す。private void setLocaleInfo(LocaleInfo localeInfo)
localeInfo
- localeInfo
に設定するロケール情報。private XlsHandler getXlsHandler()
xlsHandler
を返す。private void setXlsHandler(XlsHandler xlsHandler)
xlsHandler
- xlsHandler
に設定する依存ライブラリを使用して Excel ファイル読み込みハンドル。private boolean isOOXML()
isOOXML
を返す。private void setOOXML(boolean isOOXML)
isOOXML
- isOOXML
に設定する値。private java.util.List<InvalidCellInfo> getInvalidCellInfos()
invalidCellInfos
を返す。private void setInvalidCellInfos(java.util.List<InvalidCellInfo> invalidCellInfos)
invalidCellInfos
- invalidCellInfos
に設定する InvalidCellInfo
のリスト。private int getFoundInvalidCellNum()
foundInvalidCellNum
を返す。private void setFoundInvalidCellNum(int foundInvalidCellNum)
foundInvalidCellNum
- foundInvalidCellNum
に設定する値 (0~)。public final int getMaxInvalidCellNum()
maxInvalidCellNum
を返す。public final void setMaxInvalidCellNum(int maxInvalidCellNum)
maxInvalidCellNum
- maxInvalidCellNum
に設定する値 (1~)。public final InvalidCellInfoCollector getInvalidCellInfoCollector()
invalidCellInfoCollector
を返す。InvalidCellInfoCollector
public final void setInvalidCellInfoCollector(InvalidCellInfoCollector invalidCellInfoCollector)
invalidCellInfoCollector
- invalidCellInfoCollector
に設定する不正データ検知通知受信インスタンス。InvalidCellInfoCollector
private int getReadableRowNum()
readableRowNum
を返す。private void setReadableRowNum(int readableRowNum)
readableRowNum
- readableRowNum
に設定する値 (0~)。private int getLastReadRowNo()
lastReadRowNo
を返す。private void setLastReadRowNo(int lastReadRowNo)
lastReadRowNo
- lastReadRowNo
に設定する値 (1~)。public final HeaderCallable getHeaderCallable()
headerCallable
を返す。public final void setHeaderCallable(HeaderCallable headerCallable)
headerCallable
- headerCallable
に設定する HeaderCallable
public final DetailCallable getDetailCallable()
detailCallable
を返す。public final void setDetailCallable(DetailCallable detailCallable)
detailCallable
- detailCallable
に設定する DetailCallable
public final java.lang.String getSheetName()
sheetName
を返す。public final void setSheetName(java.lang.String sheetName)
sheetName
- sheetName
に設定するシート名。public final java.util.List<HeaderDefine> getHeaderDefines()
headerDefines
を返す。public final void setHeaderDefines(java.util.List<HeaderDefine> headerDefines)
headerDefines
- headerDefines
に設定する
HeaderDefine
のリスト。public final boolean isStopWhenHeaderHasInvalidValue()
stopWhenHeaderHasInvalidValue
を返す。public final void setStopWhenHeaderHasInvalidValue(boolean stopWhenHeaderHasInvalidValue)
stopWhenHeaderHasInvalidValue
- stopWhenHeaderHasInvalidValue
に設定する論理値。public final int getFirstDetailRowNo()
firstDetailRowNo
を返す。public final void setFirstDetailRowNo(int firstDetailRowNo)
firstDetailRowNo
- firstDetailRowNo
に設定する行番号 (1~)。public final void setBreaker(Breaker breaker)
public final java.util.List<DetailDefine> getDetailDefines()
detailDefines
を返す。public final void setDetailDefines(java.util.List<DetailDefine> detailDefines)
detailDefines
- detailDefines
に設定する
DetailDefine
のリスト。private boolean isValidHeaderDefines()
ヘッダ情報定義 List<HeaderDefine
>
に設定されている定義それぞれが正当であることを
HeaderDefine.isValid(XlsHandler, LocaleInfo)
で確認する。
private boolean isValidDetailDefines()
明細定義情報 List<DetailDefine
>
に設定されているすべての定義が正当なものであることを、確認する。
行・列の読み込み停止位置を求める Breaker
が指定されていれば、その設定が正当であることも確認する。
RowColumnBreaker
private void getCell(int rowNo, int columnNo, int breakRowNo, int breakCokumnNo)
指定された行番号 (1~) と列番号 (1~) のセルを読み込む。
読み込みを停止する行を超えた行番号が指定されていれば、
要素がゼロの行を読み込んだ上で、セルは null とする。
最後にこのメソッドを実行した際の行番号と同じ行が
指定されていれば、行内のセルの読み込みは行わない。
指定された列番号が、読み込みを停止する列番号を超えていれば、 セルは null とする。
rowNo
- 行番号 (1~)columnNo
- 列番号 (1~)breakRowNo
- 読み込みを停止する行番号 (1~)breakCokumnNo
- 読み込みを停止する列番号 (1~)private java.lang.String getValue(CellDefine cd, int rowNo, int columnNo, int breakRowNo, int breakCokumnNo) throws ReadXlsException
getCell(int, int, int, int)
で、読み込む行・列のセルを読み込み、
CellDefine.readCell(int, int, XlsHandler, InvalidCellInfoCollector)
で、そのセルから入力値を取得する。
指定されたセルが読み込み可能な行列範囲から外れた位置か未入力ならば、
空文字列 "" を入力値とする。
cd
- セル定義情報 CellDefine
rowNo
- 行番号 (1~)columnNo
- 列番号 (1~)breakRowNo
- 読み込みを停止する行番号 (1~)breakCokumnNo
- 読み込みを停止する列番号 (1~)ReadXlsException
- セルが不正なものであれば発生する。private java.lang.String getValueForHeader(CellDefine cd, int rowNo, int columnNo) throws ReadXlsException
getValue(CellDefine, int, int, int, int)
で、ヘッダ部のセルの入力値を取得する。
cd
- セル定義情報 CellDefine
rowNo
- 行番号 (1~)columnNo
- 列番号 (1~)ReadXlsException
- セルが不正なものであれば発生する。private void checkFoundInvalidCellNum() throws ReadXlsException
foundInvalidCellNum
が
maxInvalidCellNum
以上になっていれば、リターンコード
ReturnCode.FOUND_INVALID_CELLS
の ReadXlsException
を発生する。
ReadXlsException
- 不正データの検知数が上限に到達すれば発生する。private void readHeaders(java.util.Hashtable<java.lang.String,java.lang.String> header) throws ReadXlsException
ヘッダ部のセルすべての入力値を取得する。
header
- ヘッダ部のすべてのセルの入力値を収める
Hashtavle<String,String>。
キーは headerDefines で指定した項目名称。ReadXlsException
- セルが不正なものであれば発生する。private void fillEmptyCell(int cno, int nextCno, java.util.List<java.lang.String> values)
指定された列範囲を埋めるだけの空セルの入力値
EMPTY_VALUE
を挿入する。
cno
- 列範囲の開始列番号 (1~)nextCno
- 列範囲の終了列番号 (1~)values
- 空セルの入力値を挿入する行の入力値出力先リストprivate int addValue(java.util.List<CellDefine> cds, int startIdx, int limitIdx, int rno, int cno, java.util.List<java.lang.String> values, int breakRowNo, int breakCokumnNo) throws ReadXlsException
開始列から終了列の左隣までのセルの入力値を、明細情報に追加する。
明細情報にすでに保持している列と開始列の間に間隔があいているならば、
空セルを明細情報に挿入する。
cds
- 明細情報を構成する行数分の CellDefine のリストstartIdx
- 開始列の列番号 (1~)limitIdx
- 終了列の列番号 (1~)rno
- 行番号 (1~)cno
- すでに明細情報に保持している列の列番号 (1~)values
- 名細部から読み込んだ入力値 String のリストbreakRowNo
- 読み込みを停止する行の行番号 (1~)breakCokumnNo
- 読み込みを停止する列の列番号 (1~)ReadXlsException
- セルが不正なものであれば発生する。private void readDetails(java.util.List<java.util.List<java.lang.String>> details) throws ReadXlsException
明細情報を読み込む。
details
- 明細情報から読み込んだ入力値を設定する String のリストReadXlsException
- セルが不正なものであれば発生する。public static ReadXls createXlsReader(java.io.InputStream is, LocaleInfo localeInfo, XlsHandler xlsHandler, boolean isOOXML)
Excel ファイルの読み込みを行う ReadXls
のインスタンスを生成する。
is
- Excel ファイルの内容を読み込む入力ストリーム InputStreamlocaleInfo
- ロケール情報 LocaleInfo
xlsHandler
- Excel ファイルの入力操作を行う依存ライブラリのハンドラ
XlsHandler
isOOXML
- Open Office XML 形式 (拡張子が .xlsx) の Excel ファイルであれば
true を指定する。ReadXls
のインスタンスXlsHandleForPoi
,
XlsHandleForJxl
public static ReadXls createXlsReader(java.io.InputStream is, XlsHandler xlsHandler, boolean isOOXML)
日本国のロケール情報をもつ ReadXls
インスタンスを生成する。
is
- Excel ファイルの内容を読み込む入力ストリーム InputStreamxlsHandler
- Excel ファイルの入力操作を行う依存ライブラリのハンドラisOOXML
- Open Office XML 形式 (拡張子が .xlsx) の Excel ファイルであれば
true を指定する。ReadXls
のインスタンスXlsHandleForPoi
,
XlsHandleForJxl
public final ReturnCode parse(java.util.Hashtable<java.lang.String,java.lang.String> headers, java.util.List<java.util.List<java.lang.String>> details, java.util.List<InvalidCellInfo> invalidCellInfos) throws java.io.IOException
ヘッダ情報と明細情報を、Excel ファイルから読み込む。
createXlsReader(InputStream, LocaleInfo, XlsHandler, boolean)
とこのメソッドの引数が正当なものであることを確認する。
ReadXlsException
が発生すれば、そのエラーコードを
戻り値に返す。
headers
- ヘッダ情報から読み込んだ入力値を、項目値をキーとして、
出力するハッシュテーブルdetails
- 明細情報から読み込んだ入力値を、行数分、出力する
String リストのリストinvalidCellInfos
- 検知した不正データの情報を出力する
InvalidCellInfo
のリストReturnCode
java.io.IOException
- 入出力処理で異常が起きたら発生する。public final void close()
ワークブックとシートにかかわるリソースを解放する。
Excel ファイルを読み込む入力ストリームは閉じない。
public static ReturnCode readInputStream(java.io.InputStream is, LocaleInfo localeInfo, XlsHandler xlsHandler, boolean isOOXML, java.lang.String sheetName, java.util.List<HeaderDefine> headerDefines, HeaderCallable headerCallable, boolean stopWhenHeaderHasInvalidValue, int firstDetailRowNo, Breaker breaker, java.util.List<DetailDefine> detailDefines, DetailCallable detailCallable, int maxInvalidCellNum, java.util.Hashtable<java.lang.String,java.lang.String> headers, java.util.List<java.util.List<java.lang.String>> details, java.util.List<InvalidCellInfo> invalidCellInfos, InvalidCellInfoCollector invalidCellInfoCollector) throws java.io.IOException
Excel ファイルからヘッダ情報と明細情報を読み込む。
createXlsReader(InputStream, LocaleInfo, XlsHandler, boolean)
で ReadXls インスタンスを生成する。
parse(Hashtable, List, List)
で Excel ファイルからヘッダ情報と明細情報を読み込む。
close()
で読み込み処理のためのリソースを解放する。
is
- Excel ファイルの内容を読み込む入力ストリーム InputStreamlocaleInfo
- ロケール情報 LocaleInfo
xlsHandler
- Excel ファイルの入力操作を行う依存ライブラリのハンドラisOOXML
- Open Office XML 形式 (拡張子が .xlsx) の Excel ファイルであれば
true を指定する。sheetName
- シート名headerDefines
- ヘッダ情報のセル定義情報 HeaderDefine
headerCallable
- 読み込んだヘッダ情報のコールバック HeaderCallable
stopWhenHeaderHasInvalidValue
- ヘッダ情報の読み込みで不正データが検知されたら処理を停止する場合は
true を指定する。firstDetailRowNo
- 明細情報を読み込む最初の行番号 (1~)breaker
- 読み込みを停止する行・列の番号を決定する Breaker
detailDefines
- 明細情報のセル定義情報 DetailDefine
detailCallable
- 明細情報が一件分(detailDefines のリスト長分の行)
を読み込むたびに呼び出されるコールバック DetailCallable
maxInvalidCellNum
- 不正データの情報を保持する最大個数headers
- ヘッダ情報から読み込んだ入力値を、項目値をキーとして、
出力するハッシュテーブルdetails
- 明細情報から読み込んだ入力値を、行数分、出力する
String リストのリストinvalidCellInfos
- 検知した不正データの情報を出力する
InvalidCellInfo
のリストinvalidCellInfoCollector
- 不正データであるセルを検知するたびに通知する
InvalidCellInfoCollector
ReturnCode
java.io.IOException
- 入出力処理で異常が起きたら発生する。public final void notifyInvalidCellInfo(int rowNo, int columnNo, CellDefine cellDefine, CellTypeDefine cellType, java.lang.String messageId) throws ReadXlsException
InvalidCellInfoCollector
不正データを見つけた際に、その不正の内容の通知を受けるメソッド。
InvalidCellInfoCollector インタフェースを実装するクラスは、
このメソッドで不正内容についての情報を処理できる。
notifyInvalidCellInfo
インタフェース内 InvalidCellInfoCollector
rowNo
- 不正が見つかった行の行番号 (1~)columnNo
- 不正が見つかった列の列番号 (1~)cellDefine
- 不正と判定した際のセル定義情報cellType
- 不正が見つかったセルの型messageId
- 不正の内容についてのメッセージReadXlsException
- 不正データの情報を処理した結果、Excel ファイルの読み込みを中断する
必要がある場合に発生する。CellDefine
,
CellTypeDefine
,
ReadXlsException