티스토리 뷰

Visual Studio 2012

MFC에서 엑셀 파일을 사용해보자.

MS에서 제공해주는 자료를 바탕으로 모듈화 하였다.
자료는 아래 링크에서 다운 받으면 된다.
ExcelEx 소스코드

중요, Microsoft Excel 프로그램이 설치 되어 있어야 한다.

사용 하는 함수는 아래와 같다.
엑셀 실행 관련

  1. StartExcel()/QuitExcel(): 엑셀 실행/종료 시 사용한다.
  2. SaveData(): 편집한 엑셀 내용을 저장한다.
  3. ShowExcel(bShow): 실행한 엑셀 프로그램을 보여주거나/숨긴다.

WorkBook 관련

  1. OpenWorkBook(FilePath): FilePath에 있는 Workbook을 실행한다.
  2. CloseWorkBook(): 실행된 Workbook을 종료한다.
  3. CreateWorkBook(FilePath): FilePath에 엑셀 파일을 생성한다.

Sheet 관련

  1. SelectSheet(nNum/strName): 시트 번호(nNum)/시트 이름(strName)을 사용하여 시트를 선택한다.
  2. AddSheet(strName): strName의 이름을 가진 시트를 생성한다.
  3. SetSheetName(strName): SelectSheet()로 선택된 시트의 이름을 strName으로 변경한다.

엑셀 문서 사용 관련

  1. InsertPicture(nCol, nRow, strPicPath): nCol, nRow에 위치한 셀에 strPicPath에 위치한 그림 파일을 삽입한다.
  2. InsertString(nCol, nRow, strValue): nCol, nRow에 위치한 셀에 strValue의 값을 입력한다.
  3. ReadData(nCol, nRow): nCol, nRow에 위치한 셀의 값을 CString으로 읽어온다.
  4. GetExcelPos(nCol, nRow): nCol, nRow의 숫자를 'A1', 'Z3' 같은 엑셀 셀에 맞게 변환한다.

예제로 CExcelTest라는 프로젝트를 만들었다.
사용방법은 아래와 같다.

  1. 파일을 받아 원하는 프로젝트 내에 넣는다.
  2. 사용하려는 프로젝트 소스에서 ExcelEx.h를 include 하고 public으로 CExcelEx 변수를 선언한다.
// CExcelTestDlg.h : 헤더 파일 //  #pragma once #include "ExcelEx\ExcelEx.h"  // CCExcelTestDlg 대화 상자 class CCExcelTestDlg : public CDialogEx { // 생성입니다. 	... 	virtual BOOL OnInitDialog(); 	afx_msg void OnPaint(); 	afx_msg HCURSOR OnQueryDragIcon(); 	DECLARE_MESSAGE_MAP()  public: 	CExcelEx m_Excel; 	afx_msg void OnBnClickedBtnTest(); }; 
  1. IDC_BTN_TEST의 이름으로 버튼을 하나 생성하고 버튼 클릭 이벤트를 생성하여 아래와 같이 적는다.
void CCExcelTestDlg::OnBnClickedBtnTest() { 	m_Excel.StartExcel(); 	m_Excel.CreateWorkBook("D:\\test.xlsx"); 	m_Excel.SelectSheet(1); 	m_Excel.SetSheetName("TEST1"); 	m_Excel.InsertString(3,3,"HELLO"); 	m_Excel.SaveData(); 	m_Excel.CloseWorkBook(); 	m_Excel.QuitExcel(); } 
  1. 위와 같이 적고 실행하게 되면 D드라이브 폴더에 test.xlsx라는 엑셀 파일이 생성되고, 아래와 같은 화면을 볼 수 있게 된다.

시트 이름은 "TEST1"로, C3셀에 "HELLO"가 표기 되어있다.

  1. 위와 같이 사용하면 된다. 기존 파일을 불러올 때도, 굳이 OpenWorkBook()을 사용하지 않고 CreateWorkBook()을 사용해도 무방하다.

위의 소스 사용 시 순서는 아래와 같이 사용하면 된다.
StartExcel-> CreateWorkBook() -> SelectSheet() -> 시트 이름 변경 및 문서 작업 -> SaveData() -> CloseWorkBook() -> QuitExcel()

 

*21-01-19 추가

해당 프로그램을 사용할 때, 만약 스레드 안에서 사용 하려면

스레드 시작 부분에 아래 코드를 추가하여야 한다.

AfxOleInit() 을 안하면 StartExcel() 시 에러 발생한다.

if( !AfxOleInit() ) { 	AfxMessageBox("Could not initialize COM dll"); 	return; } 

댓글