본문 바로가기
C++ 200제/코딩 IT 정보

MFC 엑셀에 그림 파일 추가, Excel import Picture

by vicddory 2017. 7. 12.

MFC 엑셀에 그림 파일 추가, Excel import Picture


엑셀에 그림 파일 추가하는 소스인데 저는 함수 3개로 구현했습니다.


1. 기능 함수 : 그림 추가 함수 호출

2. 실행 함수 : 실제 엑셀 시트에 그림 추가하는 함수

3. 그림 파일 처리 함수 : BMP 파일 유효성 검사 함수


이렇게 3개 기능으로 구성했는데, 1번부터 살펴봅니다.


1. 첫 번째로 기능 함수입니다. 여기선 간단히 AddPicture()란 함수를 호출하는 정도입니다.


1
2
3
4
5
6
7
8
9
10
11
12
CString img_path = "C:\abc.bmp";
 
int IMG_POS_LEFT = 0;
int IMG_POS_TOP = 100;
int IMG_WIDTH = 100;
int IMG_HEIGHT = 100;
 
Shapes shape = excel_sheet.GetShapes();
 
AddPicture(shape, img_path,
        IMG_POS_LEFT, IMG_POS_TOP,
        IMG_WIDTH, IMG_HEIGHT);
cs


[다운] 기능 함수.txt


8번 : 엑셀 객체에서 Shape를 얻어와 인자로 넘깁니다. 이때, 그림의 경로, 크기, 위치도 함께 넘깁니다. 간단한 호출 함수입니다.

2. 실행 함수


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void CUtil::AddPicture(Shapes shape, char ImagePath[MAX_FSPEC_SIZE + 1], 
    const int nLeft, const int nTop, const int nWidth, const int nHeight)
{
    CFileFind fileFind;
 
    if (!fileFind.FindFile(ImagePath))
    {
        uc1601("이미지를 생성하지 못했습니다.", TRUE);
 
        return;
    }
 
    HBITMAP hBmp = LoadAnImage((LPSTR)(LPCTSTR)ImagePath);
 
    if (hBmp == NULL)
    {
        uc1601("이미지를 생성하지 못했습니다.", TRUE);
 
        return;
    }
 
    shape.AddPicture(ImagePath, 01, nLeft, nTop, nWidth, nHeight); // 엑셀에 이미지 삽입
}
cs



4~11번 : 경로에 정말 그림 파일이 있는지 확인합니다.

13~20번 : HBITMAP 객체를 만들어 실제로 그림 파일을 추가합니다.


여기서 MFC 엑셀 그림 파일 추가가 됩니다. AddPicture() 함수는 원래 엑셀에서 제공하는 기본 함수입니다.

사실, AddPicture() 함수만 소개해도 되는데, 기왕에 비즈니스 로직에 들어갈 정도로 꾸며놓은 소스가 보기 좋겠다s는 생각이 들어 일부러 길게 포스팅했습니다.


MFC 엑셀에 그림 파일 추가하는 방법[MFC 엑셀에 그림 파일 추가, Excel import Picture]


3. 그림 파일 처리 함수


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
HBITMAP CUtil::LoadAnImage(LPCTSTR pszPath)
{
    IPicture* pPic = 0;
    WCHAR wpath[MAX_PATH] = { 0, };
 
    MultiByteToWideChar(CP_ACP, 0, pszPath, -1, wpath, MAX_PATH);
 
    OleLoadPicturePath(wpath, NULLNULLNULL, IID_IPicture,(LPVOID*)&pPic);
 
    if (pPic == NULL
    {
        pPic->Release();
 
        return NULL;
    }
 
    HBITMAP hPic = NULL;
    pPic->get_Handle((UINT*)&hPic);
 
    HBITMAP hPicRet = (HBITMAP)CopyImage(hPic, IMAGE_BITMAP, 00, LR_COPYRETURNORG);
 
    pPic->Release();
 
    return hPicRet;
}
cs



이건 그냥 응용하세요. MFC는 1999년 이후로 지원이 끊겨서 이 정도로 구성한 소스라면 그림 파일 처리하는 함수 어디에서든 사용할 수 있습니다.


MFC 엑셀에 그림 파일 추가, Excel import Picture

댓글