미리 만들어진 엑셀 양식에 자료를 할당하고 이미지 삽입하는 것도 인쇄의 좋은 방법이다.
퀵리포트의 대안이 될 수도 있고 무엇보다 유지보수 하기가 편하다.
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); 와 동일
'델파이' 카테고리의 다른 글
템플릿 Templates 이용 코드 자동화 Ctrl + j (0) | 2016.09.03 |
---|---|
TDBNavigator 의 Insert 버튼의 Insert 메소드를 Append 로 바꾸기 (0) | 2016.09.01 |
와일드카드(*) 사용한 일괄 파일삭제 (0) | 2016.06.08 |
PDF 파일 만들기 (엑셀 OleObject 이용) (0) | 2016.05.20 |
TPopupMenu , TMenuItem 을 사용하는 TComponent 알아내기 (0) | 2016.05.15 |