본문 바로가기

Programming/MFC

[MFC] 엑셀 파일 읽기 (vs2019)

이번에는 MFC 에서 엑셀파일을 읽는 방법입니다. 

 

우선 엑셀파일을 읽기 위해서는 아래 네 가지 종류의 파일이 필요합니다.
아래 네 가지 종류의 파일은 링크된 깃허브에서 받아올 수 있습니다. 

https://github.com/SaeByeolMun/mfc_excel_api

 

GitHub - SaeByeolMun/mfc_excel_api: mfc_excel_api

mfc_excel_api. Contribute to SaeByeolMun/mfc_excel_api development by creating an account on GitHub.

github.com

 

우선 해당 라이브러리를 사용하기 위해 미리 컴파일되는 헤더에 두 가지 헤더파일을 include 해줍니다. 

// pch.h
#include "ExcelAPI/XLAutomation.h";
#include "ExcelAPI/XLEzAutomation.h";

 

버튼을 누르면 엑셀파일을 읽어올 수 있도록 하기 위해, 하나의 버튼을 생성해 줍니다. 

[도구 상자] -> [Button]

 

해당 버튼을 클릭 했을 때, 어떠한 이벤트를 처리할 수 있도록 이벤트 처리기 함수를 생성해 줍니다. 

이벤트를 처리할 클래스 목록은 해당하는 dialog 파일을 선택해주시면 됩니다. 

 


이렇게 만들어진 버튼 클릭 함수에서 엑셀 데이터를 불러오는 방법은 아래와 같습니다. 

 

우선 엑셀 파일 불러오는 라이브러리와 파일명을 정의해 줍니다. 

/*
CMainDlg.cpp
void CMainDlg::OnBnClickedButtonReadData()
*/

// 불러올 cell 데이터 
CString cstrCellData;

// std::string 형태의 cell 데이터
std::string strCellData;

// 엑셀 파일 위치 선언
String  cstrLabelPath = _T("C:\\data\\excel.xlsx")

//엑셀 파일 불러오는 라이브러리 정의
CXLEzAutomation XL(FALSE);

 

정의된 엑셀 파일을 불러와주고 각 셀을 읽어줍니다.
저 같은 경우에는 정해진 셀(3, 2)부터 아래 방향으로 글을 읽어오고 싶었기 때문에 아래와 같은 방법으로 진행을 했습니다. 

 

// CMainDlg.cpp
// void CMainDlg::OnBnClickedButtonReadData()


// 파일 open
XL.OpenExcelFile(cstrLabelPath);

// 각 cell에서 불러올 point 좌표
// 저는 불러올 데이터가 좌표값이기 때문에 아래와 같은 변수를 정의하였는데, 
// 다른 값인 경우 정의를 달리해서 사용하시면 될 것 같습니다. 
std::vector<Point3f> points;
Point3f p;

// 처음 셀 위치
int row = 3;
int col = 2;
// 불러올 셀 개수
int cMax = 17;

for (int i = 0; i < cMax; i++)
{
	// 각 셀의 값 불러오기
	cstrCellData = XL.GetCellValue(row, col);
	// CString to std::string 변환 (개인적으로 선언해둔 함수입니다.)
	strCellData = func.CString2string(cstrCellData);
	
	// std::string to Point3f 변환 (개인적으로 선언해둔 함수입니다.)
	p = func.returnPoint3d(strCellData);
	// points 벡터에 값 저장
	points.push_back(p);
	
	// 다음 세로 셀로 번호 이동
	col += 1;
}
// XL 메모리 해제하기
XL.ReleaseExcel();