「Java Excel API(以下JXLと記述します)」は、JavaでMicrosoft Excelを扱うことのできる
オープンソースのライブラリです。
同様のライブラリとしてはApache POIが有名ですが、Wordなど複数のMicrosoft文書を
操作できるPOIとは異なり、こちらはExcelに特化したライブラリとなっています。

今回はExcel文書の読み込み機能に焦点を当て、利用するAPIを記述していきたいと思います。
( 2008/06/23 )

導入
こちらよりアーカイブをダウンロードします。
アーカイブ内のjxl.jarにCLASSPATH環境変数を設定すれば導入完了となります。

開始/終了処理

jxl.Workbookを使用します。

Excelファイルを読み込む。
java.io.Fileインスタンスから読み込む
File excelFile = new File("path/to/excel.xls");
Workbook workbook = Workbook.getWorkbook(excelFile);


java.io.InputStreamインスタンスから読み込む
InputStream input = new java.io.FileInputStream("path/to/excel.xls");
Workbook workbook = Workbook.getWorkbook(input);


Excelファイルの読み込みを終了する。
Workbook.close();



ワークブックの操作

jxl.Workbookを使用します。

ワークブック内のシート数を確認する。
int count = workbook.getNumberOfSheets();


ワークブック内のシート名称を確認する。
String[] sheetNames = workbook.getSheetNames();


内容を読み込むためにシートのインスタンスを取得する。
// インデックスを指定して取得する
int index = 0;
Sheet sheetByIndex = workbook.getSheet(index);

// シート名を指定して取得する
String sheetName = "Sheet1";
Sheet sheetByNames = workbook.getSheet(sheetName);

// 全てのシートを取得する
Sheet[] sheets = workbook.getSheets();


※ シートの操作はこちらを参照してください。

登録された名前定義を取得する。
※ 「挿入->名前->定義」で登録された名前定義名称を取得します。
String[] rangeNames = workbook.getRangeNames();


名前定義されたセル範囲を取得する。
String rangeName = "area1";
Range[] ranges = workbook.findByName(rangeName);

※ セル範囲の操作はこちらを参照してください。


シートの操作

jxl.Sheetを使用します。
Sheetインスタンスの取得はこちらを参照してください。

シート名を確認する。
String sheetName = sheet.getName();


シート内のページ切り替え位置を確認する。
// 行の区切り位置を取得
int[] rowPageBreaks = sheet.getRowPageBreaks();
// 列の区切り位置を取得
int[] colPageBreaks = sheet.getColumnPageBreaks();


有効行/列数を取得する。
// 行数の確認
int rowCount = sheet.getRows();
// 列数の確認
int colCount = sheet.getColumns();


指定行/列のセルを取得する。
// 行、列を指定してセルを取得
int column = 0;
int row = 0;
Cell cell = sheet.getCell(column, row);

// セル名を指定して取得
String cellName = "A1";
Cell cellByName = sheet.getCell(cellName);

// 行を指定してセルを取得
Cell[] rows = sheet.getCell(row);

// 列を指定してセルを取得
Cell[] columns = sheet.getCell(column);

※ セルの操作はこちらを参照してください。

行/列のフォーマットを取得する。
// 行フォーマットの取得
int row = 0;
CellView rowView = sheet.getRowView(row);

// 列フォーマットの取得
int column = 0;
CellView colView = sheet.getColumnView(column);

※ 行/列フォーマットの内容確認はこちらを参照してください。

イメージを取得する。
// 全イメージ数の取得
int imageCount = sheet.getNumberOfImages();
// インデックス指定でイメージを取得
int index = 0;
Image image = sheet.getDrawing(index);

※ イメージの操作はこちらを参照してください。

ハイパーリンクを取得する。
// 全リンクの取得
Hyperlink[] links = sheet.getHyperlinks();

※ リンクの操作はこちらを参照してください。

結合範囲を取得する。
// 全結合範囲の取得
Range[] maerges = sheet.getMergedCells();

※ 結合範囲の操作はこちらを参照してください。

行/列の確認

jxl.CellViewを使用します。
CellViewインスタンスの取得はこちらを参照してください。

行/列共通のセルフォーマットを取得する。
CellFormat format = cellView.getFormat();

フォーマット内容の確認はこちらを参照してください。

サイズ(幅)を取得する。
int size = cellView.getSize();


表示/非表示属性を取得する。
boolean isHidden = cellView.isHidden();


セルの操作

jxl.Cellを使用します。

位置を取得する。
// 行位置の取得
int row = cell.getRow();
// 列位置の取得
int column = cell.getColumn();


内容を取得する。
セルの形式に合わせてCellインスタンスをキャストします。
// セルの形式に関わらず文字列として取得
String value = cell.getContents();

// セルの形式に合わせて内容を取得
CellType type = cell.getType();
// 真偽値
if (type == CellType.BOOLEAN) {
jxl.BooleanCell booleanCell = (jxl.BooleanCell) cell;
boolean value = booleanCell.getValue();
// 真偽関数
} else if (type == CellType.BOOLEAN_FORMULA) {
jxl.BooleanFormulaCell booleanCell = (jxl.BooleanFormulaCell) cell;
// 値の確認
boolean value = booleanCell.getValue();
// 関数の確認
String formula = booleanCell.getFormula();
// 日付
} else if (type == CellType.DATE) {
jxl.DateCell dateCell = (jxl.DateCell) cell;
// 値の確認
java.util.Date date = dateCell.getDate();
// 表示形式の確認
java.text.DateFormat dateFormat = dateCell.getDateFormat();
// 日付関数
} else if (type == CellType.DATE_FORMULA) {
jxl.DateCell dateCell = (jxl.DateFormulaCell) cell;
// 値の確認
java.util.Date date = dateCell.getDate();
// 表示形式の確認
java.text.DateFormat dateFormat = dateCell.getDateFormat();
// 関数の確認
String formula = dateCell.getFormula();
// エラー
} else if (type == CellType.ERROR) {
jxl.ErrorCell errorCell = (jxl.ErrorCell) cell;
// エラーコードの確認
int errorCode = errorCell.getErrorCode();
// 関数エラー
} else if (type == CellType.FORMULA_ERROR) {
jxl.ErrorFormulaCell errorCell = (jxl.ErrorFormulaCell) cell;
// エラーコードの確認
int errorCode = errorCell.getErrorCode();
// 関数の確認
String formula = errorCell.getFormula();
// 文字列
} else if (type == CellType.LABEL) {
jxl.LabelCell = labelCell = (jxl.LabelCell) cell;
String value = labelCell.getString();
// 文字列関数
} else if (type == CellType.STRING_FORMULA) {
jxl.StringFormulaCell = labelCell = (jxl.StringFormulaCell) cell;
// 値の確認
String value = labelCell.getString();
// 関数の確認
String formula = errorCell.getFormula();
// 数値
} else if (type == CellType.NUMBER) {
jxl.NumberCell numberCell = (jxl.NumberCell) cell;
// 値の確認
double value = numberCell.getDate();
// 表示形式の確認
java.text.NumberFormat numberFormat = dateCell.getNumberFormat();
} else if (type == CellType.NUMBER_FORMULA) {
jxl.NumberCell numberCell = (jxl.NumberCell) cell;
// 値の確認
double value = numberCell.getDate();
// 表示形式の確認
java.text.NumberFormat numberFormat = dateCell.getNumberFormat();
// 関数の確認
String formula = numberCell.getFormula();
}


表示/非表示属性を確認する。
boolean isHidden = cell.isHidden();


セルフォーマットを取得する。
jxl.format.CellFormat format = cell.getCellFormat();

詳細な確認はこちらを参照してください。

セルのコメントを確認する。
jxl.CellFeatures features = cell.getCellFeatures();
String comment = features.getComment();


セルフォーマットの確認

jxl.format.CellFormatを使用します。

配置位置を確認する。
// 横位置
jxl.format.Alignment align = format.getAlignment();
// 縦位置
jxl.format.VerticalAlignment align = format.getVerticalAlignment();
// インデント
int indent = format.getIndentation();
// 方向
Orientation orientation = format.getOrientation();


背景を確認する。
// 背景色
jxl.format.Colour color = format.getBackgroundColour();
// パターン
jxl.format.Pattern pattern = format.getPattern();


罫線を確認する。
// 罫線の有無
boolean hasBorder = format.hasBorder();

// Borderクラスで確認する罫線位置を指定
// 罫線の種類
jxl.format.BorderLineStyle style = format.getBorderLine(jxl.format.Border.TOP);
// 罫線の色
jxl.format.Colour color = format.getBorderColour(jxl.format.Border.TOP);

※ 斜線は確認できません。

フォントを確認する。
// フォントの取得
jxl.format.Font font = format.getFont();
// 文字色
jxl.format.Colour color = format.getColour();
// フォント名
String name = format.getName();
// サイズ
int size = format.getPointSize();
// イタリックかどうか
boolean isItalic = format.isItalic();
// 文字飾り
// 取り消し線
// 上下付き



イメージ操作

jxl.Imageを使用します。
Imageインスタンスの取得はこちらを参照してください。

イメージの表示位置を確認する。
// 行位置を取得
double rowPosition = image.getRow();
// 列位置を取得
double colPoisition = image.getColumn();


イメージのサイズを確認する。
// 幅を取得
double width = image.getWidth();
// 高さを取得
double height = image.getHeight();


イメージの内容を確認する。
// java.io.Fileインスタンスとして取得
java.io.File file = image.getImageFile();
// byte配列として取得
byte[] data = image.getImageData();


リンク操作

jxl.Hyperlinkを使用します。
Hyperlinkインスタンスの取得はこちらを参照してください。

リンク設定位置を取得する。
// 範囲取得
Range range = hyperlink.getRange();

// 開始位置を取得
int startRow = hyperlink.getRow();
int startCol = hyperlink.getColumn();

// 終了位置を取得
int endRow = hyperlink.getLastRow();
int endCol = hyperlink.getLastColumn();

範囲操作はこちらを参照してください。

リンク先を確認する。
// リンク先がファイルの場合
if (hyperlink.isFile()) {
java.io.File file = hyperlink.getFile();
}

// リンク先がURLの場合
if (hyperlink.isURL()) {
java.net.URL url = hyperlink.getURL();
}


範囲の操作

jxl.Rangeを使用します。

開始/終了位置のセルを取得する。
// 開始セル
jxl.Cell start = range.getTopLeft();
// 終了セル
jxl.Cell end = range.getBottomRight();

セルの操作はこちらを参照してください。


次回は書き込み機能について記述していきたいと思います。