Apache POI3.8のライブラリを使用し、Excelファイルの画像入りのシートをコピーします。(失敗しました)
【手順】
1.「Javaプロジェクトの作成方法」の手順で、「POIExcelSample013-CopySheetImageNG」といプロジェクトを作成。
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.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
public class Main {
private static final String INPUT_FILE = "InsertImage.xls";
private static final String OUTPUT_FILE = "CopiedSheetImageNG.xls";
public static void main(String[] args) throws Exception {
FileInputStream in = null;
try {
in = new FileInputStream(INPUT_FILE);
POIFSFileSystem fs = new POIFSFileSystem(in);
HSSFWorkbook wb = new HSSFWorkbook(fs);
HSSFSheet sheet2 = wb.cloneSheet(0);
wb.setSheetName(0, "copied sheet1");
FileOutputStream fileOut = new FileOutputStream(OUTPUT_FILE);
wb.write(fileOut);
fileOut.close();
} finally {
if (in != null)
in.close();
}
}
}
6.「Ctrl+Shift+O」を押し、パッケージのインポート文を補完。7.「Ctrl+Shift+F」を押し、ソースコードをフォーマッティング。
8.以下の様な「InsertImage.xls」のExcelファイルを、「POIExcelSample013-CopySheetImageNG」プロジェクト以下に配置します。
9.「Javaプロジェクトの実行方法」の手順で、「Main.java」を実行。
10.コンソールに以下の様な警告が出力されます。
(※コンソールが表示されていない場合は、「コンソール・ビューの表示方法」を確認)
11.「POIExcelSample013-CopySheetImageNG/CopiedSheetImageNG.xls」が作成されています。
12.「POIExcelSample013-CopySheetImageNG/CopiedSheetImageNG.xls」をダブルクリック。
13.「CopiedSheetImageNG.xls」が以下の様に開き、Excelのファイルが壊れてしまいます。
【結論】
どうやら、Apache POI3.8のバグの様で、画像入りのシートのコピーは出来ないようです。
POI3.9では直っている様です。
以上です。



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