public class Project03_B {
public static void main(String[] args) {
try {
// 1. 메모리에 가상의 엑셀을 만들고 내가 원하는 위치에 이미지를 저장
Workbook wb=new XSSFWorkbook();
// 2. Sheet My Sample Excel 생성
Sheet sheet=wb.createSheet("My Sample Excel");
// 3. 이미지 파일을 읽어오기 위해 InputStream 객체
InputStream inputStream=new FileInputStream("pic.jpg");
// 4. 바이트 단위로 읽어와서 바이트 배열에 저장(아직 엑셀에 쓰기 X)
byte[] bytes=IOUtils.toByteArray(inputStream);
// ----------------------------------------------------
// 드로잉을 하기 위한 함수들
// 5. 바이트 단위로 저장 되어 있는 이미지를 실제 메모리에 이미지 개체로 만들기 위해
// 워크북 아래 이미지 데이터(바이트)가 JPEG 포멧이라는 것을 addPicture로 알려줌
// bytes에 있는 데이터를 이미지 개체로 만들고 그 번지를 pictureIdx가 가지고 있는 상태
int pictureIdx=wb.addPicture(bytes, Workbook.PICTURE_TYPE_JPEG);
// 6. 닫기
inputStream.close();
// ----------실제로 드로잉하기 위한-----------------------
// 1. 만드는 걸 도와주는 객체 : 워크북에 무언가 만들겠다는 뜻
CreationHelper helper=wb.getCreationHelper();
// 2. 실제로 이미지를 sheet에 그릴 것이다.Drawing 객체
Drawing drawing=sheet.createDrawingPatriarch();
// 3. Anchor는 실제로 엑셀에 이미지 들어갈 위치 지정
ClientAnchor anchor=helper.createClientAnchor();
anchor.setCol1(1); // Column B
anchor.setRow1(2); // Row 3
anchor.setCol2(2); // Column C
anchor.setRow2(3); // Row 4
// 4. 그려라 anchor 위치에 pictureIdx이미지를 createPicture
// 가상의 Workbook에 그려지는 것
Picture pict=drawing.createPicture(anchor, pictureIdx);
// 5. 셀의 너비 높이 조정해야 한다. 2행 1열 셀을 하나 만들고
Cell cell=sheet.createRow(2).createCell(1);
// 6. 너비는 데이터 하나가 1/256. 20이 글자 폭
int widthUnits=40*256;
sheet.setColumnWidth(1, widthUnits);
// 7. 높이는 1/20
short heightUnits=240*20;
cell.getRow().setHeight(heightUnits);
FileOutputStream fileOut=null;
fileOut=new FileOutputStream("myFile.xlsx");
// wb(워크북).write(써라)(OutputStream으로);
wb.write(fileOut);
System.out.println("이미지 생성 성공");
fileOut.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}