Movatterモバイル変換


[0]ホーム

URL:


S-JIS[2014-03-27/2020-09-12]変更履歴

Apache POI

POI(ポイ)は、JavaExcelファイルを操作する為のライブラリー。


ダウンロード

POIのライブラリー(jarファイル)を使うには、Gradleを使っていれば、build.gradleの依存関係にPOIを指定すればよい。

build.gradle:

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'}

Excelファイルを読み込むサンプル

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



Excel操作ライブラリーへ戻る /Java目次へ戻る /技術メモへ戻る
メールの送信先:ひしだま

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


[8]ページ先頭

©2009-2026 Movatter.jp