JavaのApache POIでエクセルを操作するサンプルです。
確認環境 ・Eclipse4.8 ・Java 8 ・Apache POI 4.1.2 |
目次
サンプル | 1.Apache POI |
2.jarファイルの取得 | |
3.エクセルに値を書き込む | |
4.エクセルの値を読み込む | |
5.エラーメッセージ |
1.Apache POI
- Javaでマイクロソフトのドキュメントを操作できるAPIです。
- 以下は、Apache POIのリンクです。
https://poi.apache.org/ - 以下は、Apache POI 4.1.xのJavadocsです。
https://poi.apache.org/apidocs/4.1/
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)