質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

0回答

1118閲覧

Java Apache POIでエクセルを操作

yuki_h

総合スコア5

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2023/01/16 04:53

前提

Javaでエクセル操作がしたいと思い、調べると「Apache POI」というライブラリ
出てきたのでダウンロードしたのですが、コンパイルは通るがJavaコマンドで実行すると
エラーメッセージが出てしまう。

ダウンロードしたのバージョンは poi-bin-5.0.0-20210120 です(最新でした)

実現したいこと

◆下記のエラーを解決
◆一般的な環境設定が知りたい

発生している問題・エラーメッセージ

エラー: メイン・クラスTestを初期化できません 原因: java.lang.NoClassDefFoundError: org/apache/poi/ss/usermodel/Workbook

該当のソースコード

Test.java

1import java.io.IOException; 2import java.io.InputStream; 3import java.io.OutputStream; 4import java.io.File; 5import java.nio.file.Files; 6import java.nio.file.Path; 7import java.nio.file.Paths; 8 9import org.apache.poi.ss.usermodel.Cell; 10import org.apache.poi.ss.usermodel.CellStyle; 11import org.apache.poi.ss.usermodel.FillPatternType; 12import org.apache.poi.ss.usermodel.CellValue; 13import org.apache.poi.ss.usermodel.Workbook; 14import org.apache.poi.ss.usermodel.Sheet; 15import org.apache.poi.ss.usermodel.Row; 16import org.apache.poi.xssf.usermodel.XSSFWorkbook; 17import org.apache.poi.ss.usermodel.IndexedColors; 18 19public class Test { 20 21 public static void main(String[] args){ 22 System.out.print("start"); 23 24 Workbook tempbook = null; 25 try { 26 Path tempPath = Paths.get("C:\\Java\\TestFile\\test.xlsx"); 27 InputStream inSt = Files.newInputStream(tempPath); 28 tempbook = new XSSFWorkbook(inSt); 29 Sheet sheet = tempbook.getSheet("Sheet1"); 30 Row row = sheet.createRow(0); 31 Cell cell = row.createCell(0); 32 cell.setCellValue("AAA"); 33 CellStyle styleA1 = tempbook.createCellStyle(); 34 styleA1.setFillPattern( 35 FillPatternType.SOLID_FOREGROUND); 36 styleA1.setFillForegroundColor( 37 IndexedColors.MAROON.getIndex()); 38 cell.setCellStyle(styleA1); 39 40 row = sheet.createRow(1); 41 cell = row.createCell(0); 42 cell.setCellValue("BBB"); 43 CellStyle styleA2 = tempbook.createCellStyle(); 44 styleA2.setFillPattern( 45 FillPatternType.SOLID_FOREGROUND); 46 styleA2.setFillForegroundColor( 47 IndexedColors.BLUE.getIndex()); 48 cell.setCellStyle(styleA2); 49 50 row = sheet.createRow(2); 51 cell = row.createCell(0); 52 cell.setCellValue("CCC"); 53 CellStyle styleA3 = tempbook.createCellStyle(); 54 styleA3.setFillPattern( 55 FillPatternType.SOLID_FOREGROUND); 56 styleA3.setFillForegroundColor( 57 IndexedColors.GREEN.getIndex()); 58 cell.setCellStyle(styleA3); 59 60 Path outPath = Paths.get("C:\\Java\\TestFile\\out.xlsx"); 61 OutputStream outSt = Files.newOutputStream(outPath); 62 tempbook.write(outSt); 63 } catch (IOException e) { 64 System.out.print("error"); 65 } finally { 66 try { 67 if (tempbook != null) { 68 tempbook.close(); 69 } 70 } catch (IOException e) { 71 System.out.print("error"); 72 } 73 } 74 System.out.print("done"); 75 } 76

試したこと

エラーメッセージを調べると
org.apache.poi.xssf.usermodel.Workbookクラスがみつかっていない?感じだった。
poi-ooxml-schemasーバージョンナンバー.jar
といファイルが必要という記事を見つけたので
(ダウンロードしたフォルダにはありませんでした)

poi-ooxml-schemas-3.8-20120326.jarをダウンロード
クラスパスを通してリトライしましたが全く同じエラーがでます。

補足情報(FW/ツールのバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2023/01/16 04:57

コードが最後途切れている感じですが、 } が足りないだけでしょうか。
dameo

2023/01/16 05:25 編集

クラスが見つからないということで、classpathなどの設定が間違ってるはずです。 実行環境が分からないので設定方法は分かりません。ドキュメント的にはこの辺です。 https://poi.apache.org/components/spreadsheet/how-to.html (リンク先修正しました。さっきは開発用だった) ただ環境設定系は書いてないみたいですね。昔使ったときはjarを一個クラスパス通しちゃえばOKだった気がします。
yuki_h

2023/01/16 06:59 編集

失礼いたしました。 該当のソースコードの 大外の } が抜けてました。
hoshi-takanori

2023/01/16 09:53

poi-bin-5.0.0-20210120.tar.gz (zip も同じはず) を解凍すると jar ファイルが 24 個できて、これらをすべてクラスパスに追加したらとりあえず動きました。 > ダウンロードしたのバージョンは poi-bin-5.0.0-20210120 です(最新でした) 最新は poi-bin-5.2.3-20220909 では。 > poi-ooxml-schemas-3.8-20120326.jarをダウンロード poi-ooxml-schemas は poi-ooxml-lite という名前に変わったようです。 ってか、3.8-20120326 って明らかにバージョン古い…。 > ◆一般的な環境設定が知りたい 普通は jar ファイルを直接扱わずに、maven とか gradle とかの依存管理を使うのでは…。 (そもそも Eclipse や IntelliJ のような IDE を使ってないとか?)
dameo

2023/01/16 10:15

1つじゃ駄目みたいですね。手元で確認したところ $ java -classpath .:poi-5.2.3.jar:poi-ooxml-5.2.3.jar Test 2つ必要でした。 私はeclipse使ってます。
yuki_h

2023/01/16 11:49

@hoshi-takanoriさん 返信ありがとうございます。原因は自分で作ったコンパイル用BAT内の-cpコマンドの参照先 がずれていることでした。申し訳ございません。 >普通は jar ファイルを直接扱わずに、maven とか gradle とかの依存管理を使うのでは…。 (そもそも Eclipse や IntelliJ のような IDE を使ってないとか?) 独学なためスッキリJavaやデザインパターン入門でサンプルコードを使いながら学んでいる段階です。 背伸びしてしまってかもしれません、、、。 IDEやビルドツールもそろそろ学ばなければと思っていたのですが、イマイチやり方が分からず 困っている状況です。 今回はご回答ありがとうございました。
yuki_h

2023/01/16 11:51

@dameoさん 原因は自分で作ったコンパイル用BAT内の-cpコマンドの参照先がずれていることでした。申し訳ございません。 IDEも使ってみるようにしてみます!! ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問