POIでExcelに画像を設定する方法です。
サンプルソース
例)画像「gazo.jpg」を設定したExcelを生成する
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 |
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import org.apache.commons.compress.utils.IOUtils; import org.apache.poi.ss.usermodel.ClientAnchor; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.util.Units; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class PoiSample { public static void main(String[] args) { //Excelデータ生成 Workbook wb = new XSSFWorkbook(); //ブックの生成 Sheet sh = wb.createSheet(); //シートの生成 //Excelファイル準備 FileOutputStream out = null; String path = "D:¥¥sample.xlsx"; //画像ファイル準備 InputStream in = null; String filePath = "D:¥¥gazo.jpg"; try { //画像を読み込む in = new FileInputStream(filePath); byte[] b = IOUtils.toByteArray(in); in.close(); int pidx = wb.addPicture(b, Workbook.PICTURE_TYPE_JPEG); //画像の種類:JPEG //画像表示位置を設定する ClientAnchor ca = wb.getCreationHelper().createClientAnchor(); ca.setCol1(1); //表示位置(開始列) ca.setRow1(1); //表示位置(開始行) ca.setCol2(6); //表示位置(終了列) ca.setRow2(6); //表示位置(終了行) ca.setDx1(Units.EMU_PER_PIXEL * 5); //余白(左) ca.setDy1(Units.EMU_PER_PIXEL * 5); //余白(上) ca.setDx2(Units.EMU_PER_PIXEL * -5); //余白(右) ca.setDy2(Units.EMU_PER_PIXEL * -5); //余白(下) //画像を挿入する sh.createDrawingPatriarch().createPicture(ca, pidx); //Excel出力 out = new FileOutputStream(path); wb.write(out); } catch (Exception ex) { ex.printStackTrace(); } finally { try { wb.close(); out.close(); in.close(); } catch (Exception ex2) { ex2.printStackTrace(); } } } } |
備考
- 上記サンプルの余白設定の所にある「Units.EMU_PER_PIXEL」を使用すると、Excelで使用する単位でサイズを指定できます。