Java Apache POIでエクセルを操作するサンプル

JavaのApache POIでエクセルを操作するサンプルです。

確認環境
・Eclipse4.8
・Java 8
・Apache POI 4.1.2

目次

サンプル 1.Apache POI
  2.jarファイルの取得
  3.エクセルに値を書き込む
  4.エクセルの値を読み込む
  5.エラーメッセージ

1.Apache POI

2.jarファイルの取得

1.commons-collections4とcommons-compressを取得します。
以下は、Mavenで取得する場合です。
pom.xmlに2~13行目を追加します。1,14行目がない場合は1,14行目も追加します。

<dependencies>
	<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-collections4 -->
	<dependency>
		<groupId>org.apache.commons</groupId>
		<artifactId>commons-collections4</artifactId>
		<version>4.1</version>
	</dependency>
	<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-compress -->
	<dependency>
		<groupId>org.apache.commons</groupId>
		<artifactId>commons-compress</artifactId>
		<version>1.18</version>
	</dependency>
</dependencies>

2.Apache POIのサイトからzipファイルを取得します。(poi-bin-4.1.2-20200217.zip)
https://poi.apache.org/download.html

3.zipファイルを展開して下図の赤枠のjarファイルとooxml-libフォルダの中にあるxmlbeans-x.x.x.jarをクラスパスに追加します。
Eclipse jarファイルをクラスパスに設定する方法参照。

以下は、ooxml-libフォルダの中にあるxmlbeans-x.x.x.jarです。

※すべてpomで登録しても問題ないです。

Eclipseで見ると以下のようになります。

ライブラリを参照できていればMavenでなくても問題ありません。

3.エクセルに値を書き込む

Javaのpoiでエクセルに値を書き込むサンプルです。

package test1;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
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 Test1 {
	public static void main(String[] args) {
	
        String dir = "D:\\test1";
        String file1 = "\\book1.xlsx";
	    
	    XSSFWorkbook workbook1;
		try {
			workbook1 = new XSSFWorkbook(new FileInputStream(dir + file1));
			
		    XSSFSheet sheet1 = workbook1.getSheet("sheet1");
		    
		    XSSFRow row1 = sheet1.createRow(1);
		    
		    XSSFCell cell1 = row1.createCell(1);
		    
		    cell1.setCellValue("ばなな");
		    
		    FileOutputStream out1 = new FileOutputStream(dir + file1);
		    
		    workbook1.write(out1);
		    
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

19~25行目は、エクセルの書き込むセルを特定しています。
27行目は、セルに値をセットします。
29,31行目は、エクセルに文字列"ばなな"を出力しています。

実行結果です。

4.エクセルの値を読み込む

Javaのpoiでエクセルの値を読み込むサンプルです。

package test1;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
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 Test1 {
	public static void main(String[] args) {
	
        String dir = "D:\\test1";
        String file1 = "\\book1.xlsx";
	    
	    XSSFWorkbook workbook1;
		try {
			workbook1 = new XSSFWorkbook(new FileInputStream(dir + file1));
			
		    XSSFSheet sheet1 = workbook1.getSheet("sheet1");
		    
		    XSSFRow row1 = sheet1.getRow(1);
		    
		    XSSFCell cell1 = row1.getCell(1);
		    
		    System.out.println(cell1);
		    
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

18行目は、ファイルを指定しています。
20行目は、シートのsheet1を指定しています。
22行目は、2行目を指定しています。値の0は1行目です。
24行目は、2列目を指定しています。値の0は1列目です。
26行目は、コンソールに文字列の"ばなな"が出力されます。

実行結果です。

5.エラーメッセージ

エラー1

Caused by: java.lang.ClassNotFoundException: org.apache.xmlbeans.XmlException

xmlbeans-3.0.2.jarがビルドパスに追加されていないと発生します。

エラー2

Caused by: java.lang.ClassNotFoundException: org.apache.commons.collections4.ListValuedMap

commons-collections4がビルドパスに追加されていないと発生します。バージョンも確認します。上記項番2のpom.xmlを参照下さい。

エラー3

Caused by: java.lang.ClassNotFoundException: org.apache.commons.compress.archivers.zip.ZipFile

commons-compressがビルドパスに追加されていないと発生します。上記項番2のpom.xmlを参照下さい。

関連の記事

Java テキストファイルの読み書き(NIO.2のFiles)
Java ファイルの存在/移動/削除他(NIO.2のFiles)

△上に戻る