Apache POI (Poor Obfuscation Implementation) は Apache ソフトウェア財団のプロジェクトで Word や Excel といった Microsoft Office 形式のファイルを読み書きできる 100% Java ライブラリとして提供されています。配布ライセンスは Apache License に従っています。
Apache POI プロジェクトは、次のようなサブコンポーネントからなっています(ウィキペディア Apache POI から抜粋)。
- POIFS (Poor Obfuscation Implementation File System)
- Microsoft OLE 2 複合ドキュメント形式を読み書きするコンポーネント。すべての Microsoft Office ファイルは OLE 2 ファイルであるため、POIFS は他の POI 構成要素の基礎となっている。
- HSSF (Horrible SpreadSheet Format)
- Microsoft Excel (XLS) 形式のファイルを扱う。Excel 97以降のファイルを読み書きできる。
- XSSF (XML SpreadSheet Format)
- Office Open XML Workbook形式のファイルを扱う。Excel 2007で採用されたOOXML形式のファイルを読み書きできる。
- HWPF (Horrible Word Processor Format)
- Microsoft Word (DOC) 形式のファイルを扱う。Word 97以降のファイルを読み書きできる。Word 95以前の形式も限定的に読むことができる。
- XWPF (XML Word Processor Format)
- Office Open XML Document形式のファイルを扱う。Word 2007で採用されたOOXML形式のファイルを読み書きできる。
- HSLF (Horrible Slide Layout Format)
- Microsoft PowerPoint (PPT) 形式のファイルを扱う。PowerPoint 97以降のファイルを読み書きできる。
- XSLF (XML Slide Layout Format)
- Office Open XML Presentation形式のファイルを扱う。PowerPoint 2007で採用されたOOXML形式のファイルを読み書きできる。
- HPSF (Horrible Property Set Format)
- Microsoft Officeのドキュメントサマリーを読むコンポーネント。
- HDGF (Horrible DiaGram Format)
- Microsoft Visio形式のファイルを扱う。現在は読み取りのみ可能。
- HPBF (Horrible PuBlisher Format)
- Microsoft Publisher形式のファイルを扱う。ファイル内の一部の読み取りに限られている。
- HSMF (Horrible Stupid Mail Format)
- Microsoft Outlook (MSG) 形式のファイルを扱う。現在はファイルの読み取りのみ可能。
多機能なライブラリですが、今回は Excel の XLSX 形式のファイルを読み込むサンプルを紹介します。
動作環境は次の通りです。
- OS: WIndows 8.1 (64bit)
- Java: Java SE 1.8.0_40-b25
- IDE: NetBeans IDE 8.0.2
- poi-bin-3.11-20141221
リスト:XLSXReadSample.java
package xlsxreadsample; import java.io.FileInputStream; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class XLSXReadSample { public static void main(String[] args) { String fileName = "F:/sample_commonality.xlsx"; try { XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(fileName)); System.out.println("Data dump:\n"); for (int k = 0; k < wb.getNumberOfSheets(); k++) { XSSFSheet sheet = wb.getSheetAt(k); int rows = sheet.getPhysicalNumberOfRows(); System.out.println("Sheet " + k + " \"" + wb.getSheetName(k) + "\" has " + rows + " row(s)."); for (int r = 0; r < rows; r++) { XSSFRow row = sheet.getRow(r); if (row == null) { continue; } int cells = row.getPhysicalNumberOfCells(); System.out.println("\nROW " + row.getRowNum() + " has " + cells + " cell(s)."); for (int c = 0; c < cells; c++) { XSSFCell cell = row.getCell(c); String value = null; switch (cell.getCellType()) { case XSSFCell.CELL_TYPE_FORMULA: value = "FORMULA value=" + cell.getCellFormula(); break; case XSSFCell.CELL_TYPE_NUMERIC: value = "NUMERIC value=" + cell.getNumericCellValue(); break; case XSSFCell.CELL_TYPE_STRING: value = "STRING value=" + cell.getStringCellValue(); break; default: } System.out.println("CELL col=" + cell.getColumnIndex() + " VALUE=" + value); } } } } catch (Exception e) { System.err.println("Caught Exception: " + e.getMessage()); } } }
実行例を以下に示します。
run:
Data dump:
Sheet 0 "sample_commonality" has 21 row(s).
ROW 0 has 8 cell(s).
CELL col=0 VALUE=STRING value=LOTID
CELL col=1 VALUE=STRING value=STAGE_A
CELL col=2 VALUE=STRING value=STAGE_B
CELL col=3 VALUE=STRING value=STAGE_C
CELL col=4 VALUE=STRING value=STAGE_D
CELL col=5 VALUE=STRING value=STAGE_E
CELL col=6 VALUE=STRING value=STAGE_F
CELL col=7 VALUE=STRING value=YIELD
...
(省略)
...
ROW 20 has 8 cell(s).
CELL col=0 VALUE=STRING value=P20
CELL col=1 VALUE=STRING value=A03
CELL col=2 VALUE=STRING value=B02
CELL col=3 VALUE=STRING value=C01
CELL col=4 VALUE=STRING value=D03
CELL col=5 VALUE=STRING value=E02
CELL col=6 VALUE=STRING value=F02
CELL col=7 VALUE=NUMERIC value=91.78
ビルド成功(合計時間: 1秒)
参考サイト
- Read / Write Excel file in Java using Apache POI
- https://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/hssf/usermodel/examples/HSSFReadWrite.java
- Apache POIでExcelを操作
0 件のコメント:
コメントを投稿