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

JavaのApache POIでエクセルを操作するサンプルです。
このサンプルは、エクセルの拡張子xlsxを対象にしています。

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

目次

1.Apache POI

2.jarファイルの取得

1.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.0.1-20181203.zip)
https://poi.apache.org/download.html#POI-4.0.1

3.zipファイルを展開して下図の赤枠のjarファイルをクラスパスに追加します。
Eclipse jarファイルをクラスパスに設定する方法参照。

4.ooxml-libフォルダの中にあるxmlbeans-3.0.2.jarも追加します。

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

 

3.エクセルのファイルの中身

サンプルで使用するエクセルは、book1.xlsxで拡張子はxlsxです。

エクセルの読み込みはsheet1のB2を読み込みます。

 

エクセルの書き込みはsheet1のB2に書き込みます。

 

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 = "E:\\workspace123abc";
        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.エクセルに値を書き込む

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 = "E:\\workspace123abc";
        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);
		    
		    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行目は、エクセルに文字列"もも"を出力しています。

 

6.エラーメッセージ

エラー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がビルドパスに追加されていないと発生します。バージョンは4.1である必要があります。上記項番2のpom.xmlを参照下さい。

エラー3

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

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

関連の記事

Java テキストファイルの読み書き(Filesクラス)
Java ファイル操作のサンプル(存在/移動/削除他)

△上に戻る