델파이

델파이 VBA 엑셀 이미지 삽입 방법 2가지, Shapes.AddPicture, Pictures.Insert

미스터몽키 2016. 8. 26. 14:12

미리 만들어진 엑셀 양식에 자료를 할당하고 이미지 삽입하는 것도 인쇄의 좋은 방법이다.

퀵리포트의 대안이 될 수도 있고 무엇보다 유지보수 하기가 편하다.


VBA 에서 이미지 삽입하는 방법은 2가지가 있는 것 같다.


아래 예는 엑셀의 셀영역 "O6:Y10" 에 크기에 맞게 이미지를 삽입하는 방법이다.

이력서 양식이나, 인사카드 등의 사진 영역에 해당한다고 보면된다.


var ExcelApp, xlWorkBook, xlSheet, xlRange: OLEVariant;

     vImgFname: string;    

 ...


 vImgFname := 'http://도메인/abc.jpg';      //웹상에
 // vImgFname := ExtractFilePath(Application.ExeName) + 'abc.jpg';    //pc에


// 1. 효율적 방법 Shapes.AddPicture 이용  엑셀2010부터 지원하는듯
xlRange := xlSheet.Range['O6:Y10'];  //이미지 차지할 위치, 크기 위해
 

//AddPicture(파일경로, 링크여부, 문서와함께저장여부, 픽셀단위위치LEFT, 위치Top, 너비, 높이);
xlSheet.Shapes.AddPicture(vImgFname, True, False, xlRange.Left, xlRange.Top, xlRange.Width, xlRange.Height);  //Width, Height -1은 원본크기대로



// 2.기존 방법 Pictures.Insert 아마도 예전 엑셀에서도 사용가능할 듯,  에러가 나는 경우도 있고 Pictures[1] 은 처음 이미지인데 기존 이미지가 있다면 충돌될듯


xlSheet.Range['O6'].Select;             // 선택 셀 위치에 이미지 그리기 위해
xlRange := xlSheet.Range['O6:Y10'];    //  이미지 크기 셀에 맞추기 위해
xlSheet.Pictures.Insert(vImgFname);
xlSheet.Pictures[1].Width := xlRange.Width;
xlSheet.Pictures[1].Height :=xlRange.Height;



//기타

xlSheet.Pictures.Delete;       //모든 이미지 지울때
xlSheet.Pictures[1].Delete;  // 첫번째 이미지 지울때


* Shapes 오브젝트 참고자료

   https://msdn.microsoft.com/en-us/library/office/ff198302.aspx





(추가) 클립보드 이미지 현재 셀에 삽입하는 방법

xlSheet.Paste;



(추가)  미리보기 시  이미지 일부가 안보일 수 있다. 미리보기 창을 최대로 하면 보인다.


      ExcelApp.ScreenUpdating   := True;

      ExcelApp.Visible                := True;  //미리보기에서는 반드시 True

      ExcelApp.WindowState       := -4137; //xlMaximized;  미리보기화면을 최대화

      xlSheet.PrintPreview;           //미리보기,  xlSheet.PrintOut(Preview:=True); 와 동일