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