관리 메뉴

드럼치는 프로그래머

[API/MFC] 엑셀 자동화(Excel Automation) 본문

★─Programing/☆─API | MFC

[API/MFC] 엑셀 자동화(Excel Automation)

드럼치는한동이 2011. 5. 23. 15:13
(Ver 2009.02.18)



// 엑셀 오토메이션을 이용하여 클래스 만들기..
Class Wizard -> Automation -> Add Class ->Form a Type Libary -> Excel9.old 선택

Confirm Classes 목록에서 모든 클래스를 선택

// 기본적으로 선언되어 있지만 없으면 새로 선언한다.
#include <afxdisp.h>        // MFC Automation classes

// 엑셀 오토메이션 사용하기
// 프로그램 시작하는 곳에 반드시 아래 루틴을 추가해 주어야 한다.
if (!AfxOleInit())
{
 AfxMessageBox("Could not initialize COM dll");
 return FALSE;
}

Microsoft Access 97                   Msacc8.olb
Microsoft Jet Database 3.5            DAO350.dll
Microsoft Binder 97                   Msbdr8.olb
Microsoft Excel 97                    Excel8.olb
Microsoft Graph 97                    Graph8.olb
Microsoft Office 97                   Mso97.dll
Microsoft Outlook 97                  Msoutl97.olb
Microsoft PowerPoint 97               Msppt8.olb

Microsoft Word 97                     Msword8.olb
Microsoft Access 2000                 Msacc9.olb
Microsoft Jet Database 3.51           DAO360.dll
Microsoft Binder 2000                 Msbdr9.olb
Microsoft Excel 2000                  Excel9.olb
Microsoft Graph 2000                  Graph9.olb
Microsoft Office 2000                 Mso9.dll
Microsoft Outlook 2000                Msoutl9.olb
Microsoft PowerPoint 2000             Msppt9.olb
Microsoft Word 2000                   Msword9.olb

Microsoft Access 2002                 Msacc.olb
Microsoft Excel 2002                  Excel.exe
Microsoft Graph 2002                  Graph.exe
Microsoft Office 2002                 MSO.dll
Microsoft Outlook 2002                Msoutl9.olb
Microsoft PowerPoint 2002             MSPpt.olb
Microsoft Word 2002                   MSWord.olb

Microsoft Office Access 2003          Msacc.olb
Microsoft Office Excel 2003           Excel.exe
Microsoft Graph 2003                  Graph.exe
Microsoft Office 2003                 MSO.dll
Microsoft Office Outlook 2003         MSOutl.olb
Microsoft Office PowerPoint 2003      MSPpt.olb
Microsoft Office Word 2003            MSWord.olb





간단한 사용법
// 타이틀 출력 함수선언
void SetTitleData(CExcelAutomation &cExcel,const char *strCell, const char *strData, bool bIsBold = true);

// 타이틀 출력 함수정의
void SetTitleData(CExcelAutomation &cExcel,const char *strCell, const char *strData, bool bIsBold)
{
 cExcel.SetData(1,strCell,strCell,strData);
 cExcel.SetAlign(1,1);
 if(bIsBold) cExcel.SetFont(10,"굴림체",false,false,true);
}

// 엑셀출력함수
void TestExcelAutomation()
{
 CString szTitle,szData;
 CExcelAutomation cExcel;

 if(cExcel.GetEnableApp() == false)
 {
  // "엑셀 프로그램이 설치되어있는지 확인하여 주십시오."
  return;
 }

 // 엑셀 등록 검사
 if(cExcel.CreateExcleFile() == FALSE)
 {
  //"엑셀 파일 생성 오류.."
  return;
 }

 cExcel.SetActiveSheet(1);
 cExcel.Select(1,"A1","E1");
 cExcel.SetMerge(); // 셀병합

 SetTitleData(cExcel,"A1","사용자 정의함수");
 SetTitleData(cExcel,"A3","NO");
 SetTitleData(cExcel,"B3","프로젝트명");
 SetTitleData(cExcel,"C3","프로그램ID");
 SetTitleData(cExcel,"D3","종류");
 SetTitleData(cExcel,"E3","함수명");

 cExcel.Select(1,"A3","E3");
 cExcel.SetLine(0,3);
 cExcel.SetColor(255,255,0);

 for(int i=0;i<m_spMain.GetMaxRows();i++)
 {
  szData.Format("A%d",i+4);
  cExcel.SetData(1,szData,/*Itoa(i+1)*/);

  szData.Format("B%d",i+4);
  cExcel.SetData(1,szData,/*데이터1*/);

  szData.Format("C%d",i+4);
  cExcel.SetData(1,szData,,/*데이터2*/);

  szData.Format("D%d",i+4);
  cExcel.SetData(1,szData,,/*데이터3*/);

  szData.Format("E%d",i+4);
  cExcel.SetData(1,szData,,/*데이터4*/);
 }
 szData.Format("E%d",i+3);
 cExcel.Select(1,"A4",szData);
 cExcel.SetFont(10,"굴림체",false,false,false);
 cExcel.SetLine(0,3);
 cExcel.SetAutoFit();

 cExcel.Select(1,"A1","A1");

 szTitle.Format("사용자 정의함수(%s).xls",GetSysDate(false));
 CFileDialog Filedlg(FALSE, "xls", szTitle, OFN_EXTENSIONDIFFERENT | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "Microsoft Excel파일(*.xls)|*.xls|");

 if(Filedlg.DoModal() != IDOK) return;

 if(cExcel.SaveAs(true,Filedlg.GetPathName()) == FALSE)
 {
  cExcel.Close();
  // "엑셀 파일 생성 오류.."
  return;
 }
 cExcel.Close();

 // "완료.."
}


Comments