最近の更新

2012年5月12日土曜日

Apache POI3.8で画像を埋め込む方法(失敗)

【目的】
Apache POI3.8のライブラリでExcelに画像を埋め込みます。(失敗しました)



【手順】
1.「Javaプロジェクトの作成方法」の手順で、「POIExcelSample009-InsertImageNG」といプロジェクトを作成。
2.「poi-3.8-20120326.jarをライブラリに設定する方法」の手順で、プロジェクトに「poi-3.8-20120326.jar」のライブラリを追加。
3.「poi-3.8-20120326.jarに依存するライブラリの設定する方法」の手順で、プロジェクトに「commons-logging-1.1.jar」と「log4j-1.2.13.jar」のライブラリを追加。
4.「Javaクラスファイルの作成方法」の手順で、「Main」というクラスを作成。
5.「Main.java」を以下の様に入力。
import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
import org.apache.poi.hssf.usermodel.HSSFCreationHelper;
import org.apache.poi.hssf.usermodel.HSSFPatriarch;
import org.apache.poi.hssf.usermodel.HSSFPicture;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.util.IOUtils;

public class Main {
    private static final String IMAGE_FILE = "poi-image.jpg";
    private static final String OUTPUT_FILE = "InsertImage.xls";

    public static void main(String[] args) throws Exception {
        HSSFWorkbook wb = new HSSFWorkbook();
        HSSFSheet sheet = wb.createSheet("new sheet");

        FileInputStream inputImage = new FileInputStream(IMAGE_FILE);
        byte[] bytes = IOUtils.toByteArray(inputImage);
        int pictureIndex = wb.addPicture(bytes, HSSFWorkbook.PICTURE_TYPE_JPEG);
        inputImage.close();

        HSSFCreationHelper helper = (HSSFCreationHelper) wb.getCreationHelper();
        HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
        HSSFClientAnchor anchor = helper.createClientAnchor();
        anchor.setCol1(1);
        anchor.setRow1(1);

        HSSFPicture picture = patriarch.createPicture(anchor, pictureIndex);
        picture.resize();
        FileOutputStream fileOut = new FileOutputStream(OUTPUT_FILE);
        wb.write(fileOut);
        fileOut.close();
    }
}
6.「Ctrl+Shift+O」を押し、パッケージのインポート文を補完。
7.「Ctrl+Shift+F」を押し、ソースコードをフォーマッティング。
8.「poi-image.jpg」をコピーし、「POIExcelSample009-InsertImageNG」プロジェクトを選択して「Ctrl+V」で貼り付け。
9.「Javaプロジェクトの実行方法」の手順で、「Main.java」を実行。
10.コンソール以下のエラーが出力されてます。
(※コンソールが表示されていない場合は、「コンソール・ビューの表示方法」を確認)
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/codec/digest/DigestUtils
    at org.apache.poi.hssf.usermodel.HSSFWorkbook.addPicture(HSSFWorkbook.java:1580)
    at Main.main(Main.java:22)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.codec.digest.DigestUtils
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    ... 2 more


































【結論】
「java.lang.NoClassDefFoundError」ということなので、クラスが見つかりませんというエラー。

「org/apache/commons/codec/digest/DigestUtils」が見つからないクラス。

どうやら、Apache CommonsのCodecライブラリが必要な様です。



以上です。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。

関連記事