Automation Class 활용
두 클래스를 이용
Excel Automation class - CXLAutomation
Wrpper class - CXLEzAutomation
필요한 파일
XLEzAutomation.h
XLEzAutomation.cpp
XLAutomation.h
XLAutomation.cpp
함수를 구현할 파일에 추가
#include "XLEzAutomation.h"
wchar_t chThisPath[_MAX_PATH];
UpdateData(TRUE);
// 엑셀파일이 있는 경로 지정 CString strThisPath ; strThisPath.Format(_T("%s\\%s.xlsx") ,_T("C:\\Work\\Basketball\\Season 1"),m_city);
GetModuleFileName( NULL, chThisPath, _MAX_PATH); CXLEzAutomation XL(FALSE); // FALSE: 처리 과정을 화면에 보이지 않는다
XL.OpenExcelFile(strThisPath); // 엑셀 파일 열기
XL.SetCellValue(1, 1, "안녕"); // WorkSheet의 (1,1)에 값을 저장 XL.SaveFileAs(strThisPath); // 엑셀 파일 저장
XL.ReleaseExcel(); // 엑셀 파일 해제 |
엑셀 파일 읽기
wchar_t chThisPath[_MAX_PATH]; UpdateData(TRUE); // 엑셀파일이 있는 경로 지정 CString strThisPath ; strThisPath.Format(_T("%s\\%s.xlsx") ,_T("C:\\Work\\Basketball\\Season 1"), m_city); GetModuleFileName( NULL, chThisPath, _MAX_PATH); CXLEzAutomation XL(FALSE); // FALSE: 처리 과정을 화면에 보이지 않는다 XL.OpenExcelFile(strThisPath); // 액셀 파일 열기 int temp = _ttoi(XL.GetCellValue(1, 1)); // WorkSheet의 (1, 1)의 값을 얻음 XL.ReleaseExcel(); // 엑셀 파일 해제 |
CXL Connection methods
Method | Group | Function |
Class constructor | Open/Exit app | 엑셀 시작, 워크시트생성 |
ReleaseExcel() | Open/Exit app | 엑셀 닫기 |
SetCellValue(..) | Data exchange | cell 값 설정 |
GetCellValue(..) | Data exchange | cell 값 얻음 |
ExportCString(..) | Data exchange | 클립보드 사용 |
CreateXYChart(..) | Chart methods | XY 차트 생성 |
UpdateXYChart(..) | Chart methods | XY 차트 업데이트 |
InsertPictureFromClipboard(..) | Picture methods | DIB 그림 삽입 |
InsertPictureFromFile(..) | Picture methods | 그림 파일 삽입 |
SaveFileAs(..) | File access | 엑셀 파일 저장 |
OpenExcelFile(..) | File access | 읽기를 위한 엑셀파일 열기 |
DeleteRow(..) | Worksheet housekeeping | 현재 워그시트의 열 삭제 |
Automation Class
.cpp / .h
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
예전 진행했던 프로젝트에서 엑셀 파일 연 후 자동으로 검색하여 수정해야 할 필요가 있었습니다. 본 클래스는 그때 만들었던 라이브러리 입니다. 복잡한 COM 기술을 몰라도, 클래스에서 제공하는 인터페이스를 사용하는 것 만으로 엑셀을 외부에서 제어할 수 있습니다.
다음과 같은 인터페이스를 제공합니다. 인터페이스는 각각 주석이 달려있는 대로 사용하면 됩니다. 인자중 X, Y는 엑셀 파일을 열었을 때 가장 상단이 왼쪽 첫번째 칼럼이 0, 0을 의미하고 그 오른쪽으로는 1,0 2,0 3,0 과 같은 방식으로 늘어납니다. 그 아래로는 1,1 1,2 1,3 과 같이 Y 영역이 늘어나게 됩니다.
BOOL InitExcelLib(void);
// 인스턴스를 초기화하고 엑셀 객체를 생성한다.
BOOL CreateExcel(void);
// 인스턴스를 초기화하고 파일을 오픈한다.
BOOL OpenExcelFile(TCHAR *wsFileName);
// 파일을 닫고 인스턴스를 종료한다.
BOOL CloseExcelFile(void);
// 파일을 저장한다.
BOOL SaveExcelFile(void);
BOOL SaveAs(TCHAR *pwsFileName);
// Excel 창을 띄운다.
BOOL SetVisible(BOOL fOn=TRUE);
// Sheet 이름을 구한다.
BOOL GetSheetName(DWORD dwSheetNumber, TCHAR *pwsSheetName);
// Sheet 이름을 변경한다.
BOOL ChangeSheetName(DWORD dwSheetNumber, TCHAR *pwsSheetName);
// Sheet 갯수를 구한다.
DWORD GetSheetCount(void);
// Sheet를 추가한다.
BOOL AddSheet(TCHAR *pwsSheetName);
// Sheet을 선택한다.
BOOL SetActiveSheet(INT nSheetNum);
// Data를 읽어온다.
BOOL GetData(DWORD dwX, DWORD dwY, TCHAR *pwsOut, DWORD dwBufferLen);
BOOL GetData(INT nSheetNum, DWORD dwX, DWORD dwY, TCHAR *pwsOut, DWORD dwBufferLen);
// 다음칸의 데이터를 읽는다. 데이터가 비어있다면 FALSE 리턴
// fDirection: UPPER, BOTTOM, LEFT, RIGHT
BOOL GetNextData(INT fDirection, TCHAR *pwsOut, DWORD dwBufferSize);
// Data를 쓴다.
BOOL SetData(DWORD dwX, DWORD dwY, TCHAR *pwsInput);
BOOL SetData(INT nSheetNum, DWORD dwX, DWORD dwY, TCHAR *pwsOut);
// 다음칸에 데이터를 쓴다.
// fDirection: UPPER, BOTTOM, LEFT, RIGHT
BOOL SetNextData(INT fDirection, TCHAR *pwsInput);
// 검색
// pwsSeed : 검색할 단어
// pwsResult : 검색된 문장
// pdwX, pdwY : 검색된 위치
// Active page 전체를 검색
BOOL SearchAll(TCHAR *pwsSeed, TCHAR *pwsResult, DWORD &pdwX, DWORD &pdwY);
// 지정된 dwX나 dwY 좌표를 검색
BOOL SearchX(DWORD dwX, TCHAR *pwsSeed, TCHAR *pwsResult, DWORD &pdwX, DWORD &pdwY);
BOOL SearchY(DWORD dwY, TCHAR *pwsSeed, TCHAR *pwsResult, DWORD &pdwX, DWORD &pdwY);
// 다음 찾기
BOOL SearchNext(TCHAR *pwsResult, DWORD &pdwX, DWORD &pdwY);
// Active range 구하기
BOOL GetActiveRange(DWORD &pdwBX, DWORD &pdwBY, DWORD &pdwLX, DWORD &pdwLY);
다음은 본 라이브러리를 이용한 사용 예제 입니다. CExcelLib의 인스턴스를 생성한 후, 제공하는 인터페이스를 이용하기만 하면 됩니다. 다음 예제는 text.xls라는 엑셀 파일을 연 후, bcd라는 문자열이 있는 칼럼을 찾는 예제입니다.
WCHAR wsResult[MAX_STRING_BUFFER_SIZE];
DWORD dwBX, dwBY, dwLX, dwLY;
BOOL bResult;
// text.xls 파일을 오픈한다.
clsExcel.OpenExcelFile(L"c:\\test.xls", OPEN_EXCEL_FILE);
// 첫번째 Sheet를 선택한다.
clsExcel.SetActiveSheet(1);
// Active Range, 즉 현재 활성화 되어 있는 범위를 얻어온다.
clsExcel.GetActiveRange(dwBX, dwBY, dwLX, dwLY);
// 활성화 영역 전체에서 bcd 문자열을 찾는다. 결과 위치는 dwBX, dwBY로 리턴된다.
clsExcel.SearchAll(L"bcd", wsResult, dwBX, dwBY);
while(TRUE)
{
// 다음 아이템을 찾는다. 더이상 찾을 수 없다면 FALSE가 리턴된다.
bResult = clsExcel.SearchNext(wsResult, dwBX, dwBY);
if(bResult == FALSE)
{
break;
}
}
// 2번째 칸에서 bcd를 찾는다.
clsExcel.SearchX(2, L"bcd", wsResult, dwBX, dwBY);
while(TRUE)
{
bResult = clsExcel.SearchNext(wsResult, dwBX, dwBY);
if(bResult == FALSE)
{
break;
}
}
// 9번째 줄에서 bcd를 찾는다.
clsExcel.SearchY(9, L"bcd", wsResult, dwBX, dwBY);
while(TRUE)
{
bResult = clsExcel.SearchNext(wsResult, dwBX, dwBY);
if(bResult == FALSE)
{
break;
}
}
// 엑셀 파일을 닫는다.
clsExcel.CloseExcelFile();
본 라이브러리에 라이센스는 특별히 없습니다만, 혹시 이 라이브러리를 업그레이드하거나, 잘못된점을 수정하신다면 그것을 이 블로그를 통해 다시 공유해주시기 바랍니다. 그것을 통해 더 많은 사람들이 편하게 프로그래밍 할 수 있게 될것입니다.
펌 : http://getroot.tistory.com/2
감사합니다 정말 ㅠㅠ
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ExcelFormat Library 활용
참고사이트 : http://myblue0324.tistory.com/6
라이브러리
[출처] MFC에서 Excel 사용(Automation Class)|작성자 IT바이블
'MFC' 카테고리의 다른 글
[MFC] Excel Automation 프로젝트 세팅하기 (2) | 2014.02.27 |
---|---|
[MFC] token 분리함수 ( AfxExtractSubString ) (0) | 2014.02.26 |
[MFC] 2014.02.26 _ get(), getline() 함수 비교 (0) | 2014.02.26 |
[MFC] 셋업파일 출력하기 (0) | 2014.02.21 |
[MFC] List Control Editing ( 클릭시 수정 / 에디트박스로 출력 ) (2) | 2014.02.21 |