JavaでExcelを操作するためのApache POIとは?POIのダウンロードと解凍・環境変数CLASSPATHへの登録

- システム
エンジニア - JavaでExcelを操作するためのApache POIとはどのようなものなのでしょうか。
- プロジェクト
マネージャー - JavaでExcelを操作するために使用する、一般的なオープンソースです。
JavaでExcelを操作するためのApache POIとは?
JavaでExcelを操作するには、よく知られ一般的なのはオープンソースのApache POIを導入することです。POIは例えばWindowsではjarファイルの集まりで、つまり、Javaのライブラリ群です。
それを環境変数にCLASSPATHとしてPOIのjarファイルを設定してPOIが使えるようになります。
POIのダウンロードと解凍
それではPOIをダウンロードして適当なところでダウンロードしたzipファィルを解凍します。下記サイトよりPOIの最新バージョンをダウンロードします。
Apache POI
2021年6月13日現在POIは5.0.0が最新版です。POIをダウンロードしたならばzipファイルを解凍すればPOIのインストールは終了です。
環境変数CLASSPATHへの登録
POIのどのjarファイルが使用されるのか分からなかったので、POIのjarファイル全てを環境変数CLASSPATHに登録しました。
最低これだけを登録すればいいということがあるとは思うのですが、ネットではPOIの4.x.xバージョンの情報しか見つからなかったので、面倒ですが、全てをCLASSPATHに登録しました。
そうでないとコンパイル時にエラーとなります。
CLASSPATHの登録の仕方
それでは環境変数CLASSPATHにPOIのjarファイルを実際に登録しましょう。
Windows 10がここでの開発環境です。当然、JDKが事前にインストールされているということはいうまでもありません。
「スタートボタン」を右クリックして「システム」を選ぶと「詳細情報」の画面が立ち上がります。その右側に「システムの詳細設定」という項目がありますので、それをクリックします。
「システムのプロパティ」が立ち上がりますので、下部の「環境変数」をクリックします。「ユーザの環境変数」と「システムの環境変数」を見て、CLASSPATHの項目があれば、そこにPOIのjarファイルを登録してゆけばよいのです。
なければ、例えば「システムの環境変数」の「新規」をクリックして「変数名」に「CLASSPATH」と入力します。そして、「変数値」にPOIのjarファイルの絶対パスを登録していきます。
まず、一つを登録し、「OK」を押してから「編集」で登録して行くのがよいでしょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
PS D:\Dropbox\poi-bin-5.0.0-20210120> Get-ChildItem -Recurse Directory: D:\Dropbox\poi-bin-5.0.0-20210120 Mode LastWriteTime Length Name ---- ------------- ------ ---- da--- 2021/01/13 0:48 poi-5.0.0 Directory: D:\Dropbox\poi-bin-5.0.0-20210120\poi-5.0.0 Mode LastWriteTime Length Name ---- ------------- ------ ---- da--- 2021/01/13 0:48 auxiliary da--- 2021/01/13 0:48 docs da--- 2021/01/13 0:48 lib da--- 2021/01/13 0:48 ooxml-lib -a--- 2021/01/12 23:41 17915 LICENSE -a--- 2021/01/12 23:41 1104 NOTICE -a--- 2021/01/13 0:25 2906684 poi-5.0.0.jar -a--- 2021/01/13 0:27 376671 poi-examples-5.0.0.jar -a--- 2021/01/13 0:27 28985 poi-excelant-5.0.0.jar -a--- 2021/01/13 0:33 65674 poi-integration-5.0.0.jar -a--- 2021/01/13 0:27 1880314 poi-ooxml-5.0.0.jar -a--- 2021/01/13 0:26 19267559 poi-ooxml-full-5.0.0.jar -a--- 2021/01/13 0:33 8137483 poi-ooxml-lite-5.0.0.jar -a--- 2021/01/13 0:26 1860106 poi-scratchpad-5.0.0.jar Directory: D:\Dropbox\poi-bin-5.0.0-20210120\poi-5.0.0\auxiliary Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2021/01/12 23:43 4292177 batik-all-1.13.jar -a--- 2021/01/12 23:43 887800 bcpkix-jdk15on-1.68.jar -a--- 2021/01/12 23:43 5961178 bcprov-jdk15on-1.68.jar -a--- 2021/01/12 23:43 1563053 fontbox-2.0.22.jar -a--- 2021/01/12 23:43 72090 graphics2d-0.30.jar -a--- 2021/01/12 23:43 2735422 pdfbox-2.0.22.jar -a--- 2021/01/12 23:43 85686 xml-apis-ext-1.3.04.jar -a--- 2021/01/12 23:43 674446 xmlgraphics-commons-2.4.jar -a--- 2021/01/12 23:43 1122253 xmlsec-2.2.1.jar (省略) Directory: D:\Dropbox\poi-bin-5.0.0-20210120\poi-5.0.0\lib Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2021/01/12 23:43 353793 commons-codec-1.15.jar -a--- 2021/01/12 23:43 751914 commons-collections4-4.4.jar -a--- 2021/01/12 23:43 2213560 commons-math3-3.6.1.jar -a--- 2021/01/12 23:43 24510 SparseBitSet-1.2.jar Directory: D:\Dropbox\poi-bin-5.0.0-20210120\poi-5.0.0\ooxml-lib Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2021/01/12 23:43 632424 commons-compress-1.20.jar -a--- 2021/01/12 23:43 111875 curvesapi-1.06.jar -a--- 2021/01/12 23:43 2493024 xmlbeans-4.0.0.jar |
以上のjarファイルを全てCLASSPATHに登録しました。
JavaでExcelを操作
POIの設定ができましたので、実際にプログラムを組んでJavaでExcelを操作してみましょう。前提条件として作業フォルダに空のtemplate.xlsxが用意されているものとします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.File; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.FillPatternType; import org.apache.poi.ss.usermodel.CellValue; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.ss.usermodel.IndexedColors; public class PoiColor { public static void main(String[] args){ System.out.print("start: main\r\n"); Workbook tempbook = null; try { //--- テンプレートファイルをひらいて、シートを指定 --// Path tempPath = Paths.get("./template.xlsx"); InputStream inSt = Files.newInputStream(tempPath); tempbook = new XSSFWorkbook(inSt); Sheet sheet = tempbook.getSheet("Sheet1"); //--- A1セルへの書き込み --// //--- セル背景色は栗色 --// Row row = sheet.createRow(0); Cell cell = row.createCell(0); cell.setCellValue("あああ"); CellStyle styleA1 = tempbook.createCellStyle(); styleA1.setFillPattern( FillPatternType.SOLID_FOREGROUND); styleA1.setFillForegroundColor( IndexedColors.MAROON.getIndex()); cell.setCellStyle(styleA1); //--- A2セルへの書き込み --// //--- セル背景色は青 --// row = sheet.createRow(1); cell = row.createCell(0); cell.setCellValue("いいい"); CellStyle styleA2 = tempbook.createCellStyle(); styleA2.setFillPattern( FillPatternType.SOLID_FOREGROUND); styleA2.setFillForegroundColor( IndexedColors.BLUE.getIndex()); cell.setCellStyle(styleA2); //--- A3セルへの書き込み --// //--- セル背景色は緑 --// row = sheet.createRow(2); cell = row.createCell(0); cell.setCellValue("ううう"); CellStyle styleA3 = tempbook.createCellStyle(); styleA3.setFillPattern( FillPatternType.SOLID_FOREGROUND); styleA3.setFillForegroundColor( IndexedColors.GREEN.getIndex()); cell.setCellStyle(styleA3); //--- out.xlsxとしてファイル出力 --// Path outPath = Paths.get("./out.xlsx"); OutputStream outSt = Files.newOutputStream(outPath); tempbook.write(outSt); } catch (IOException e) { System.out.print("入出力例外が発生!"); } finally { //--- テンプレートをクローズ --// try { if (tempbook != null) { tempbook.close(); } } catch (IOException e) { System.out.print("終了処理で入出力例外が発生!"); } } System.out.print("end: main\r\n"); } } |
これをPowerShellを立ち上げて
1 |
PS (作業フォルダ)>javac -encoding utf-8 .\PoiColore.java |
として入力してコンパイルします。そして、コンパイルが通ったならば
1 2 3 |
PS (作業フォルダ)>java PoiColor start: main end: main |
と入力します。すると、作業フォルダにout.xlsxファイルが生成されていて、それを開くとプログラムで狙ったExcelの操作ができています。
ソースコードの解説
それではJavaでExcelをPOIのライブラリを利用して操作したソースコードの解説をします。
まず、セルの指定と文字列の書き込みですが、それはJavaのソースコードの次の箇所に当たります。
1 2 3 4 5 6 7 |
//--- A1セルへの書き込み --// //--- セル背景色は栗色 --// Row row = sheet.createRow(0); Cell cell = row.createCell(0); cell.setCellValue("あああ"); |
POIは0オリジンでrow(行)とcolum(列)を指定する形でJavaでExcelの操作を行います。Excelでは行は1から始まり列はアルファベットのAで始まりますが、JavaのPOIでは先述のように0オリジンです。そこを間違いないように気を付けてください。
色の指定
POIの色の指定ですが、塗りつぶし方は列挙型で指定されていて、色も何色もあるわけではなく、指定されています。
例えば
1 2 3 4 5 6 |
CellStyle styleA1 = tempbook.createCellStyle(); styleA1.setFillPattern(FillPatternType.SOLID_FOREGROUND); styleA1.setFillForegroundColor(IndexedColors.MAROON.getIndex()); cell.setCellStyle(styleA1); |
この箇所を例に取ると、setFillPatternメソッドで色の塗りつぶし方を指定しているのですが、ここでは所謂べた塗りを指定しています。setFillForegroundColorメソッドで色を指定しています。ここでは栗色が指定されています。
このようにJavaでExcelを操作するには最初はとっつきにくいかもしれませんが、パターンが決まっていますので、サンプルソースコードはそれほど難しいことをしてはいないのです。
- システム
エンジニア - JavaをインストールするだけではJavaでExcelを操作することができないのですね。
- プロジェクト
マネージャー - この機会にApache POIを導入し、JavaでExcelを自在に操作してみましょう。
JavaでExcelを操作するにはApache POIがお勧め
いかがでしたでしょうか。JavaでExcelを操作するにはJavaをインストールしただけではExcelは扱えず、Apache POIというライブラリの導入が一般的です。
POIが導入できたならば、JavaでもExcelが自在に操作できますので、色々なサイトを参考にして実際に自身でソースコードを書いてExcelを操作してみてください。
FEnetJava・Javaコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


Java新着案件New Job
官公庁向け業務システム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給39万~44万円東京都千代田区(永田町駅)販売管理システム開発/Java/東京都中央区/【WEB面談可】/テレワーク
月給49万~55万円東京都中央区(京橋駅)生命保険会社向けシステム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給42万~48万円東京都千代田区(大手町駅)社会保険システムのパッケージ開発/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(新橋駅)金融機関向けシステム更改/Java/東京都江東区/【WEB面談可】/テレワーク
月給46万~51万円東京都江東区(豊洲駅)大手通信会社者向けWebシステム改修/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(品川駅)