JavaのApache POIでエクセルを操作するサンプルです。
このサンプルは、エクセルの拡張子xlsxを対象にしています。
| 確認環境 ・Eclipse4.8 ・Java 8 ・Apache POI 4.0.1 |
目次
1.Apache POI
- マイクロソフトのドキュメントを操作できます。
- 以下は、Apache POIのリンクです。
https://poi.apache.org/index.html
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 フォルダ・ファイルの作成/削除/移動のサンプル(Filesクラス)