POIは、JavaでExcelファイルを操作する為のライブラリー。
|
POIのライブラリー(jarファイル)を使うには、Gradleを使っていれば、build.gradleの依存関係にPOIを指定すればよい。
apply plugin: 'java' apply plugin: 'eclipse' repositories { mavenCentral() } dependencies { compile group: 'org.apache.poi', name : 'poi', version: '3.13' compile(group: 'org.apache.poi', name : 'poi-ooxml', version: '3.13') { exclude group: 'stax', module: 'stax-api' } testCompile 'junit:junit:4.11' }
poiだけだと、Excel2007より前の形式(拡張子xls)しか扱えない。
poi-ooxmlを含めると、XML形式(拡張子xlsx)のExcelファイルも扱える。
実行環境のjavaのバージョンによっては、xlsxファイルを扱うときに例外が発生することがある。[2015-11-11]
Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.apache.poi.openxml4j.opc.internal.marshallers.ZipPackagePropertiesMarshaller at org.apache.poi.openxml4j.opc.OPCPackage.init(OPCPackage.java:162) at org.apache.poi.openxml4j.opc.OPCPackage.(OPCPackage.java:142) at org.apache.poi.openxml4j.opc.Package.(Package.java:37) at org.apache.poi.openxml4j.opc.ZipPackage.(ZipPackage.java:88) at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:273) at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:209) at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:168)
Suppressed: javax.xml.stream.FactoryConfigurationError: Provider com.bea.xml.stream.EventFactory not found at javax.xml.stream.FactoryFinder.newInstance(FactoryFinder.java:72) at javax.xml.stream.FactoryFinder.find(FactoryFinder.java:178) at javax.xml.stream.FactoryFinder.find(FactoryFinder.java:92) at javax.xml.stream.XMLEventFactory.newInstance(XMLEventFactory.java:30) at org.apache.poi.openxml4j.opc.internal.marshallers.PackagePropertiesMarshaller.(PackagePropertiesMarshaller.java:41) at org.apache.poi.openxml4j.opc.OPCPackage.init(OPCPackage.java:162) at org.apache.poi.openxml4j.opc.OPCPackage.(OPCPackage.java:142) at org.apache.poi.openxml4j.opc.Package.(Package.java:37) at org.apache.poi.openxml4j.opc.ZipPackage.(ZipPackage.java:88) at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:273) at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:209) at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:168)
この事自体はFAQに載っている。
なんか、stax-apiが悪さをしているらしい。これはJava5以前で必要なライブラリーであり、Java6以降では不要なので、依存関係から除いていいらしい。
という訳で、build.gradleのdependenciesからstax-apiをexcludeする。
dependencies { compile group: 'org.apache.poi', name : 'poi', version: '3.13' compile(group: 'org.apache.poi', name : 'poi-ooxml', version: '3.13') { exclude group: 'stax', module: 'stax-api' } testCompile 'junit:junit:4.11' }
import java.io.File; import java.io.IOException; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory;
public class PoiExample { public static void main(String... args) throws IOException, InvalidFormatException { File file = new File(args[0]); Workbook workbook = WorkbookFactory.create(file); for (int i = 0; i < workbook.getNumberOfSheets(); i++) { Sheet sheet = workbook.getSheetAt(i); System.out.println("sheetName=" + sheet.getSheetName()); Row row = sheet.getRow(0); if (row != null) { Cell cell = row.getCell(0); if (cell != null) { switch (cell.getCellType()) { case Cell.CELL_TYPE_NUMERIC: System.out.println(cell.getNumericCellValue()); break; case Cell.CELL_TYPE_STRING: System.out.println(cell.getStringCellValue()); break; default: System.out.println("cellType=" + cell.getCellType()); break; } } } } } }
ファイルからWorkbookオブジェクトを生成し、そこからWorkSheetオブジェクトを取得する。
getRow()でロー(行)を取得し、そこからgetCell()でセルを取得する。getRow()やgetCell()の引数は0オリジンである。
データの無い行やセルではnullが返ってくるので、nullチェックは必須。
|
||