엑셀 TypeLibrary를 이용한 MFC 프로그램 1.TypeLibrary를 클래스 위자드에서 추가
2.엑셀 선택(윈도우2000, 오피스2000)
3.필요한 클래스 선택
4.클래스가 임포트된 모습 과 변수선언
5.생성된 클래스는 모두 excel9.h 와 excel9.cpp에 저장됩니다. 추후 다른 클래스를 추가 할때는 위와 같은 동작을 반복하여 추가 하고자 하는 클래스를 선택 하면 자동으로 excel9.h 와 excel9.cpp에 추가 됩니다 #include "excel9.h" 를 선언하고 사용하면 됩니다.
사용 예제 1. OLE를 실행시키기 위한 초기화함수를 호출합니다. BOOL CExcelPrtApp::InitInstance() { AfxOleInit(); ... } 어플리케이션 실행시 단 한번 호출합니다.
2. Excel Object생성 TRY { //-----------------------------------------------------* // app 엑셀 오브젝트 생성 //-----------------------------------------------------* if(!app.CreateDispatch("Excel.Application")) { AfxMessageBox("Could not start EXCEL!"); return; } app.SetVisible(TRUE);
//-----------------------------------------------------* // Get Workbooks //-----------------------------------------------------* LPDISPATCH lpdisp; lpdisp=app.GetWorkbooks(); ASSERT(lpdisp); books.AttachDispatch(lpdisp); //-----------------------------------------------------* // FileOpen //-----------------------------------------------------*
//LPCTSTR Filename, const VARIANT& UpdateLinks, const VARIANT& ReadOnly, //const VARIANT& Format, const VARIANT& Password, const VARIANT& WriteResPassword, //const VARIANT& IgnoreReadOnlyRecommended, const VARIANT& Origin, const VARIANT& Delimiter, //const VARIANT& Editable, const VARIANT& Notify, const VARIANT& Converter, //const VARIANT& AddToMru /* books.Open(XlsFile, VOptional, VBoolTrue, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional); */
//-----------------------------------------------------* // Get WorkBook //-----------------------------------------------------* lpdisp=books.Add(VOptional); //새로운 엑셀객체를 생성하였을 경우 //lpdisp=books.Get_Default(COleVariant((short)(1))); //FileOpen()일 경우 ASSERT(lpdisp); book.AttachDispatch(lpdisp); //-----------------------------------------------------* // Get WorkSheets //-----------------------------------------------------* lpdisp=book.GetSheets(); ASSERT(lpdisp); sheets.AttachDispatch(lpdisp); //-----------------------------------------------------* // Get WorkSheet //-----------------------------------------------------*
lpdisp=sheets.GetItem(VShort1); ASSERT(lpdisp); sheet.AttachDispatch(lpdisp); } CATCH(CException, e) { book.Close(VBoolFalse, VOptional, VOptional); app.Quit(); app.ReleaseDispatch(); } END_CATCH 3. Excel Object 사용 – Cell에 Data 쓰기 Range range; range = Sheet.GetRange(COleVariant(“A1”), COleVariant(“A1”)); range.SetValue(COleVariant(“가나다”)); 4. Excel Object 사용 – 날짜(숫자)형식의 데이타를 텍스트 형식으로 Cell에 쓰기 const char COLUMN_POSITION = 'A'; int iRow = 1; char szColName[8]; memset(szColName, 0x00, sizeof(szColName)); for(i=0; i<7; i++) { sprintf(szColName, "%c%d", COLUMN_POSITION+i, iRow); range
=
Sheet.GetRange(COleVariant(szColName),
COleVariant(szColName)); range.SetNumberFormatLocal(COleVariant("@")); //text형식 range.SetValue(COleVariant(szWord)); } *숫자형식(xxx,xxx) => "#,##0_ " *날짜형식(yyyy년 mm월 dd일) => "yyyy""년"" m""월"" d""일"( 데이터"3/5/2002")
4. Excel Object 사용 – 선택영역 copy , paste const char COLUMN_POSITION = 'A'; char szColName[8]; char szColNameTo[8]; Range range; int iRow = 1; memset(szColName, 0x00, sizeof(szColName)); memset(szColNameTo, 0x00, sizeof(szColNameTo)); sprintf(szColName, "%c%d", COLUMN_POSITION, iRow); sprintf(szColNameTo, "%c%d", COLUMN_POSITION+7, iRow); range = pSheet->GetRange(COleVariant(szColName), COleVariant(szColNameTo)); range.Copy(VOptional); // 셀 A1:H1을 copy iRow = iRow + 1; memset(szColName, 0x00, sizeof(szColName)); sprintf(szColName, "%c%d", COLUMN_POSITION, *iRow); range = pSheet->GetRange(COleVariant(szColName), COleVariant(szColName)); range.Select(); // 셀 A2로 이동 pSheet->Paste(VOptional, VBoolFalse); //paste 5. Excel Object 사용 – 선택영역에 라인 그리기 Range range range = sheet.GetRange(COleVariant("A1"), COleVariant(“H10”)); range.Select(); // 셀 A1:H10 선택 Borders borders; borders = range.GetBorders(); borders.SetLineStyle(COleVariant((short)xlContinuous)); //실선으로 라인 그리기
6. Excel Object 사용 – 열넓이 자동 조정 range.Select();
range = range.GetEntireColumn(); range.AutoFit(); 6. Excel Object 사용 – 인쇄 pagesetup = sheet.GetPageSetup();
//페이지설정
pagesetup.SetZoom(VBoolFalse);
//배율-자동맞춤
pagesetup.SetFitToPagesWide(VShort1);
//용지너비 : 1
pagesetup.SetFitToPagesTall(VBoolFalse);
//용지넓이 : none
range = sheet.GetRange(COleVariant("A1"), COleVariant(szRange)); range._PrintOut(VShort1,
// From (page #).
VShort1,
// To (page #).
VShort1,
// Copies.
VBoolFalse,
// Preview.
VOptional,
// ActivePrinter.
VBoolFalse, // PrintToFile. VBoolTrue);
// Collate.
7. Excel 종료 Object 제거 book.Close(VBoolFalse, VOptional, VOptional); app.Quit(); app.ReleaseDispatch(); 8. (참고) COleVariant변수 선언, 변수 초기화 *선언 COleVariant VShort0; COleVariant VShort1; COleVariant
VBoolFalse;
COleVariant
VBoolTrue;
COleVariant
VOptional;
*초기화 VShort0.ChangeType(VT_I2); VShort0 = (short)0;
VShort1.ChangeType(VT_I2); VShort1 = (short)1; VBoolFalse.ChangeType(VT_BOOL); VBoolFalse = (long)FALSE; VBoolTrue.ChangeType(VT_BOOL); VBoolTrue = (long)TRUE; COleVariant m5((long)DISP_E_PARAMNOTFOUND, VT_ERROR); VOptional.ChangeType(VT_ERROR, m5); *선언과 초기화를 동시에 COleVariant VShort1((short)1); //이런식으로...
참고 - Excel 매크로 사용법 1.도구 – 매크로 – 새 매크로 기록
2.매크로가 기록중인 화면 - 데이터를 입력합니다.
3. 매크로 중지
4.기록된 매크로 보기
5.Visual Basic Editor화면