MFC에서 데이터를 엑셀 파일로 저장하는 방법

MFC에서 자료를 엑셀파일로 저장하는 방법을 찾아보았다.

여러가지 방법들이 많이 있었는데 그중에 가장 괜찮은 방법이어서 나중에 잊어버리지 않도록 여기에 써둔다.

아래 내용을 이용하기 위한 파일은 XLAutomation 이다.

혹시나 이 글을 볼 사람들이 있을까봐 아래의 코드는 짬식(wingyui)님 블로그의 내용(http://blog.naver.com/wingyui?Redirect=Log&logNo=30070208599)이며 이 코드 및 내용에 대한 모든 권리는 짬식(wingyui)님에게 있다는 것을 밝혀둔다.

int i=1,j=1,k=1;
 int columnNum=0;
 char temp[10];
 CString m_strFileName;

 CXLEzAutomation XL(FALSE); // FALSE: 처리 과정을 화면에 보이지 않는다

 m_strFileName = "Student Quiz Results";   // 저장할 파일 Name

 // column 데이터
 XL.SetCellValue(++columnNum, 1, "Login ID");
 XL.SetCellValue(++columnNum, 1, "Student ID");
 XL.SetCellValue(++columnNum, 1, "Name");

 //column 에 Quiz 번호 만큼 추가
 for(i=1;i<=m_iQuizNum;i++){
  _snprintf(temp, 10, "Quiz %d", i);
  XL.SetCellValue(++columnNum, 1 ,temp);
 }

 //학생수와 Quiz 수만큼 리스트 컨트롤에서 엑셀로 가져옴.
 for(k=1; k<=m_iStudentNum; k++)
  for(j=1; j<=columnNum; j++)
   XL.SetCellValue(j, k+1, m_ctrlScroeList.GetItemText(k-1, j));

 CFileDialog cFDlg(false,"xlsx",m_strFileName+".xlsx", OFN_HIDEREADONLY |
  OFN_OVERWRITEPROMPT | OFN_NOCHANGEDIR, "xlsx 파일 (*.xlsx)|*.xlsx|", NULL );

 if(cFDlg.DoModal() == IDOK)
  XL.SaveFileAs(cFDlg.GetPathName());

 XL.ReleaseExcel();

코드는 그다지 어렵지 않다. 하나 중요한 점은 Column과 Row 번호를 지정할 때는 0부터 시작하는 것이 아니라 1부터 시작한다는 것. 프로그래밍 할때 모든 루프는 다 0부터 시작하다보니 어색하게 느껴진다. 반드시 1부터 넣을 것.

또 하나 중요한 점은 파일을 저장할 때 확장명을 xlsx로 해야 잘 열린다. xls로 해도 저장이 되긴 하는데 MS Excel 2010으로 열려고 하니 형식이 이상하다는 경고가 한번씩 떴다. xlsx로 저장하니 오류 없이 잘 열린다.

3 Replies to “MFC에서 데이터를 엑셀 파일로 저장하는 방법”

  1. MFC 엑셀 오토메이션 공부중인데 궁금한게 있는데요

    1. XLAutomation 는 엑셀 오토메이션 래핑클래스인것같은데 다른 래핑클래스는 별로 못본것같습니다.
    이 클래스를 가장 많이 사용하나보죠?
    2. 엑셀 오토메이션을 이용하면 엑셀 파일의 입출력 뿐만아니라
    엑셀의 스프레드시트 컨트롤만 MFC 프로그램의 다이얼로그에 붙여서 사용하는것도 가능한거죠?
    3. MS엑셀 프로그램과 엑셀 스프레드시트 컨트롤을 붙인 MFC 프로그램이 동일한 파일을 열어놓고
    어느 한쪽에서 값을 입력하면 다른 한쪽에서도 바로바로 갱신이 되게끔 하는것도 가능한가요?
    4. 엑셀 프로그램이 항상 띄워져야하나요? 엑셀 실행하지 않고 엑셀 파일에만 입출력 작업을 하는것도 가능하죠?

    1. 1. 가장 많이 사용하는지는 저도 모르겠네요.
      2. 아니요. 제가 아는 선에서는 MFC 컨트롤로 제공되지는 않습니다.
      3. 파일을 양쪽에서 핸들링 가능한 상태로 열어놓은 상태를 유지하면서 실시간으로 파일을 동기화하는 것은 불가능합니다. 이런게 가능한 프로그램이 있나요…?
      4. 네 띄워지더군요. 그게 참 불편합니다. 그러한 문제들이 해결된 다른 좋은 라이브러리가 나와있지 않을까 싶기도하네요.

Leave a Reply

Your email address will not be published. Required fields are marked *