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チェックは必須。
|
||