학습목표    1

학습주제    1

예습내용    1

실습방법    1

        1

중요함수    1

엑셀,워드 자동으로 만들기

학습목표

계측된 데이터를 자동으로 엑셀과 워드를 만든다.

학습주제

1.      엑셀에 데이터를 기록하고 챠트를 만든다.

2.      워드에 데이터를 기록하고 테이블을 만든다.

3.      오른쪽 그림과 같이 버튼을 누르면 아래와 같이 임의로 만들어진 데이터를 엑셀과 워드에 기입한다.

 

예습내용

 

실습방법

   

그림과 같이 프로젝트 이름을 ExelWord 하고 확인을누릅니다.

 

“Finish” 선택합니다.

 

다음 화면이 나오면 “Excel” “Word” 선택하여 프로젝트에 관련 헤더 파일이 포함되도록 합니다.

 

버튼을 만들고 속성 “Caption” 엑셀,워드 문서 만들기 합니다.

속성 콘트롤 이벤트에서 마우스를 크릭하면 실행되는 함수를 만듭니다.

방법 1

OnBnClickedButton1() 함수 안에 다음을 선언한다.

 

void CExelWordDlg::OnBnClickedButton1()

{

        CNiExcelApplication ExcelApp(true, CNiComInitialize::Multithreaded );

        // 기존의파일을연다.

        //CNiExcelWorkbook m_workBook = ExcelApp.OpenWorkbook("Limit.xsl");        CNiExcelWorkbook m_workBook = ExcelApp.NewWorkbook();    // 새로운엑셀파일을만든다.

        CNiExcelWorksheet m_workSheet = m_workBook.GetWorksheet("Sheet1");

 

        // 엑셀쉬트A열과B열에10개씩의데이터를쓴다.

        CString s;

        int i;

        CNiExcelCellRange range = m_workSheet.GetRange("A1");

        for(i=1;i<=10;i++) {

                s.Format("A%d",i);

                range = m_workSheet.GetRange(s);

                s.Format("%d",i);

                range.SetCellValue(s);

        }

        for(i=1;i<=10;i++) {

                s.Format("B%d",i);

                range = m_workSheet.GetRange(s);

                s.Format("%d",i*10);

                range.SetCellValue(s);

        }

   

        //엑셀챠트를그린다.

        CNiExcelChart chartSheet = m_workSheet.AddChart(10, 150, 300, 200);

    chartSheet.ChartWizard(1, "A1:B10", NiExcelChartWizardGalleryColumn, NiExcelRows, 1, 1, true, "", "", "Time", "");

           

        // 엑셀파일을저장한다.

        // 파일은디렉토리"내문서""test.xls"로저장된다.

        m_workBook.Save("test.xls",m_workBook.FileFormatExcel7);

        m_workBook.Close(m_workBook.SaveChanges);

 

}

 

방법2

ExelWordDlg.h를 다음과 같이 프로그램 한다.

 

// ExelWordDlg.h : 헤더파일

//

 

#pragma once

 

 

// CExelWordDlg 대화상자

class CExelWordDlg : public CDialog

{

// 생성입니다.

public:

        //CExelWordDlg(CWnd* pParent = NULL);    // 원래새성된함수를아래와같이수정한다.

        CExelWordDlg(bool visible = false, CWnd* pParent = NULL);       

 

// 대화상자데이터입니다.

        enum { IDD = IDD_EXELWORD_DIALOG };

 

        protected:

        virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다.

 

 

// 구현입니다.

protected:

        HICON m_hIcon;

 

        // 생성된메시지맵함수

        virtual BOOL OnInitDialog();

        afx_msg void OnSysCommand(UINT nID, LPARAM lParam);

        afx_msg void OnPaint();

        afx_msg HCURSOR OnQueryDragIcon();

        DECLARE_MESSAGE_MAP()

public:

        afx_msg void OnBnClickedButton1();

 

// 엑셀시트를만들기위해아래를선언하다.

private:

    CNiExcelApplication m_application;

    CNiExcelWorkbook m_workBook;

    CNiExcelWorksheet m_workSheet;

};

 

 

ExelWordDlg.cpp 함수의 빨간 글씨를 수정하면 프로그램이 실행되고 엑셀과 워드가 만들어 진다.

 

// ExelWordDlg.cpp : 구현파일

//

 

#include "stdafx.h"

#include "ExelWord.h"

#include "ExelWordDlg.h"

 

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

 

static CString testTitles [] = {"Test 1", "Test 2", "Test 3", "Test 4", "Test 5"}; // 엑셀열의제목

static CString deviceTitles [] = {"Device 1", "Device 2", "Device 3", "Device 4", "Device 5"};  // 엑셀행의제목

//chartValues : 챠트선형태차례로"Column", "Bar", "Line", "XYScatter", "3DSurface", "3DCylinderCol"

static DWORD chartValues [] = {NiExcelChartTypesColumnClustered, NiExcelChartTypesBarClustered, NiExcelChartTypesLine, NiExcelChartTypesXYScatter, NiExcelChartTypes3DSurface, NiExcelChartTypes3DCylinderCol};

static int nChartTypes = 6;

static int nTests = 5;  //엑셀의생성되는행과열의데이터개수

 

// 응용프로그램정보에사용되는CAboutDlg 대화상자입니다.

 

class CAboutDlg : public CDialog

{

public:

        CAboutDlg();

 

// 대화상자데이터입니다.

        enum { IDD = IDD_ABOUTBOX };

 

        protected:

        virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 지원입니다.

 

// 구현입니다.

protected:

        DECLARE_MESSAGE_MAP()

};

 

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)

{

}

 

void CAboutDlg::DoDataExchange(CDataExchange* pDX)

{

        CDialog::DoDataExchange(pDX);

}

 

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)

END_MESSAGE_MAP()

 

 

// CExelWordDlg 대화상자

 

//다음함수를아래와같이수정선언해야엑셀챠트가생성된다. 처음에는visiblefalse로되어

//있어서이를true로선언하면엑셀시트가나타난다.

//CExelWordDlg::CExelWordDlg(CWnd* pParent /*=NULL*/)

//      : CDialog(CExelWordDlg::IDD, pParent)

//{

//      m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

//}

 

CExelWordDlg::CExelWordDlg(bool visible, CWnd* pParent)

        :m_application(visible), m_workBook(m_application.NewWorkbook()), m_workSheet(m_workBook.GetWorksheet(1)), CDialog(CExelWordDlg::IDD, pParent)

{

        m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

 

void CExelWordDlg::DoDataExchange(CDataExchange* pDX)

{

        CDialog::DoDataExchange(pDX);

}

 

BEGIN_MESSAGE_MAP(CExelWordDlg, CDialog)

        ON_WM_SYSCOMMAND()

        ON_WM_PAINT()

        ON_WM_QUERYDRAGICON()

        //}}AFX_MSG_MAP

        ON_BN_CLICKED(IDC_BUTTON1, &CExelWordDlg::OnBnClickedButton1)

END_MESSAGE_MAP()

 

 

// CExelWordDlg 메시지처리기

 

BOOL CExelWordDlg::OnInitDialog()

{

        CDialog::OnInitDialog();

 

        // 시스템메뉴에"정보..." 메뉴항목을추가합니다.

 

        // IDM_ABOUTBOX는시스템명령범위에있어야합니다.

        ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);

        ASSERT(IDM_ABOUTBOX < 0xF000);

 

        CMenu* pSysMenu = GetSystemMenu(FALSE);

        if (pSysMenu != NULL)

        {

                CString strAboutMenu;

                strAboutMenu.LoadString(IDS_ABOUTBOX);

                if (!strAboutMenu.IsEmpty())

                {

                        pSysMenu->AppendMenu(MF_SEPARATOR);

                        pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);

                }

        }

 

        // 이대화상자의아이콘을설정합니다. 응용프로그램의주창이대화상자가아닐경우에는

        //  프레임워크가이작업을자동으로수행합니다.

        SetIcon(m_hIcon, TRUE);                  // 큰아이콘을설정합니다.

        SetIcon(m_hIcon, FALSE);         // 작은아이콘을설정합니다.

 

        // TODO: 여기에추가초기화작업을추가합니다.

 

        return TRUE;  // 포커스를컨트롤에설정하지않으면TRUE를반환합니다.

}

 

void CExelWordDlg::OnSysCommand(UINT nID, LPARAM lParam)

{

        if ((nID & 0xFFF0) == IDM_ABOUTBOX)

        {

                CAboutDlg dlgAbout;

                dlgAbout.DoModal();

        }

        else

        {

                CDialog::OnSysCommand(nID, lParam);

        }

}

 

// 대화상자에최소화단추를추가할경우아이콘을그리려면

//  아래코드가필요합니다. 문서/뷰모델을사용하는MFC 응용프로그램의경우에는

//  프레임워크에서이작업을자동으로수행합니다.

 

void CExelWordDlg::OnPaint()

{

        if (IsIconic())

        {

                CPaintDC dc(this); // 그리기를위한디바이스컨텍스트

 

                SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

 

                // 클라이언트사각형에서아이콘을가운데에맞춥니다.

                int cxIcon = GetSystemMetrics(SM_CXICON);

                int cyIcon = GetSystemMetrics(SM_CYICON);

                CRect rect;

                GetClientRect(&rect);

                int x = (rect.Width() - cxIcon + 1) / 2;

                int y = (rect.Height() - cyIcon + 1) / 2;

 

                // 아이콘을그립니다.

                dc.DrawIcon(x, y, m_hIcon);

        }

        else

        {

                CDialog::OnPaint();

        }

}

 

// 사용자가최소화된창을끄는동안에커서가표시되도록시스템에서

//  이함수를호출합니다.

HCURSOR CExelWordDlg::OnQueryDragIcon()

{

        return static_cast<HCURSOR>(m_hIcon);

}

 

void CExelWordDlg::OnBnClickedButton1()

{

 

    //================   엑셀문서를만든다.  ===================================

        m_application.Visible = true;    //숨겨진엑셀챠트가화면에보인다.

        m_application.WindowState = CNiExcelApplication::WindowStateMaximized;

 

        // 엑셀쉬트A열과B열에10개씩의데이터를쓴다.

        CString s;

        int i;

        CNiExcelCellRange range = m_workSheet.GetRange("A1");

        for(i=1;i<=10;i++) {

                s.Format("A%d",i);

                range = m_workSheet.GetRange(s);

                s.Format("%d",i);

                range.SetCellValue(s);

        }

        for(i=1;i<=10;i++) {

                s.Format("B%d",i);

                range = m_workSheet.GetRange(s);

                s.Format("%d",i*10);

                range.SetCellValue(s);

        }

   

        //엑셀챠트를그린다.

        CNiExcelChart chartSheet = m_workSheet.AddChart(10, 150, 300, 200);

    chartSheet.ChartWizard(1, "A1:B10", NiExcelChartWizardGalleryColumn, NiExcelRows, 1, 1, true, "", "", "Time", "");

           

        // 챠트의모양을선으로한다. 다른형태의챠트는제일위에선언된chartValues을참조하시오.

    //int data;

        //data = (int)(NiExcelChartTypesLine);

    //chartSheet.ChartType = (NiExcelChartTypes)data;

 

        // 엑셀파일을저장한다.

        CFileDialog pDlg(FALSE,"xls","",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"엑셀파일(*.xls)|*.xls|");

        if(pDlg.DoModal()==IDOK)

        {

                CString s=pDlg.GetPathName();

                m_workBook.Save(s,m_workBook.FileFormatExcel7);

                m_workBook.Close(m_workBook.SaveChanges);

        }

 

}

 

 

 

 

 

 

 

처음

   

 

중요함수