학습목표    1

학습주제    1

예습내용    1

실습방법    1

        1

중요함수    1

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

학습목표

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

학습주제

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

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

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

 

 

예습내용

 

실습방법

   

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

 

“Finish” 선택합니다.

 

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

 

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

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

 

ExelWordDlg.h  파일에서 CExelWordDlg 함수의 선언을 바꾸고 엑셀 시트를 위한 변수를 선언 한다

 

// 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:

    CNiReal64Matrix m_matrix; //엑셀에입력할데이터저장벡터

    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);

}

//===================  프로그램 생략 ===========================

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

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

HCURSOR CExelWordDlg::OnQueryDragIcon()

{

        return static_cast<HCURSOR>(m_hIcon);

}

 

// 엑셀행과열의제목을적는다.

static void SetUpTitleRow(CNiExcelWorksheet &workSheet)

{

    CNiExcelCellRange titleRange = workSheet.GetRange("B1:F1");

    titleRange.WriteDataFromArray(testTitles, 1, 5);

    titleRange = workSheet.GetRange("A2:A5");

    titleRange.WriteDataFromArray(deviceTitles, 5, 1);  

}

 

// 행과열의평군값을구하고쓴다.

static void SetUpFormulas(CNiExcelWorksheet &workSheet)

{ 

    CNiExcelCellRange range = workSheet.GetRange("A8");

    range.SetCellValue("Average");

    range = workSheet.GetRange("B8");

    range.Formula = "=AVERAGE(B2:B6)";

    range = workSheet.GetRange("C8");

    range.Formula = "=AVERAGE(C2:C6)";

    range = workSheet.GetRange("D8");

    range.Formula = "=AVERAGE(D2:D6)";

    range = workSheet.GetRange("E8");

    range.Formula = "=AVERAGE(E2:E6)";

    range = workSheet.GetRange("F8");

    range.Formula = "=AVERAGE(F2:F6)";

 

    range = workSheet.GetRange("H1");

    range.SetCellValue("Average");

    range = workSheet.GetRange("H2");

    range.Formula = "=AVERAGE(B2:F2)";

    range = workSheet.GetRange("H3");

    range.Formula = "=AVERAGE(B3:F3)";

    range = workSheet.GetRange("H4");

    range.Formula = "=AVERAGE(B4:F4)";

    range = workSheet.GetRange("H5");

    range.Formula = "=AVERAGE(B5:F5)";

    range = workSheet.GetRange("H6");

    range.Formula = "=AVERAGE(B6:F6)";

}

 

void CExelWordDlg::OnBnClickedButton1()

{

        // TODO: 여기에컨트롤알림처리기코드를추가합니다.

        // 엑셀시트에m_matrix 값을쓸것입니다.

        int i,j;

        m_matrix.SetSize(5, 5);

        //m_matrix에임의의값을만들었습니다.

        for(i=0;i<5;i++)

                for(j=0;j<5;j++)

                        m_matrix(i,j) = i*10+j;

                       

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

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

        m_application.WindowState = CNiExcelApplication::WindowStateMaximized;

   

        //행과열의제목을적는다.

        SetUpTitleRow(m_workSheet);

 

        //앞에서설정한m_matrix의값을엑셀시트에쓴다.

        CNiExcelCellRange cellRange = m_workSheet.GetRange("B2:F6");

        cellRange.WriteDataFromArray(m_matrix);

 

        // 행과열의평군값을구하고쓴다.

        SetUpFormulas(m_workSheet);

 

        //엑셀챠트를그린다.

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

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

           

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

    int data;

        data = (int)(NiExcelChartTypesLine);

    chartSheet.ChartType = (NiExcelChartTypes)data;

 

        //==================    워드문서를만든다.  ==============================================

        CNiWordApplication application;

    CNiWordDocument document = application.CreateDocument();

 

    document.SetHeader("", "자동으로생성된보고서", "", CNiWordDocument::FieldDate, CNiWordDocument::FieldEmpty, CNiWordDocument::FieldTime);

 

    document.FontSize = 15;

    document.AppendText("문서작업테스트");

 

    document.FontSize = 12;

    document.NewLine();

    document.NewLine();

    document.FontBold = true;

    document.AppendLine("데이타테이블");

 

        document.FontBold = false;

    document.NewLine();

 

        //표를만듭니다.

        CNiWordTable table = document.AddTable(nTests, nTests);

    document.AppendText("테이블1.  엑셀데이타결과");

    document.NewLine();

    document.AddBookMark("토론");

 

        // 워드작업에서테이블에 m_matrix 값과제목을적는다.

        int x, y;

    CString temp;

    for(x = 0; x < nTests; x++)

        for(y = 0; y < nTests; y++)

        {

            temp.Format(_T("%f"), m_matrix(x,y));

            table.WriteToCell(y+1, x+1, temp);

        }

   

    table.InsertColumns(1, 1);

    table.InsertRows(1, 1);

   

    for(x = 0; x < nTests; x++)

    {

        table.WriteToCell(1, x+2, deviceTitles[x]);

        table.WriteToCell(x+2, 1, testTitles[x]);

    }

 

    for(x = 0; x <= nTests; x++)

        table.SetColumnWidth(x+1, .98);

 

        // 워드작업에서평균값을적는다.

        CNiReal64Vector vector(nTests);

        CNiReal64Vector m_MeanValues;

    double mean;

    double stdDev;

 

        m_MeanValues.SetSize(nTests);

       

    table.InsertRows(-1, 1);

    table.WriteToCell(7, 1, "Average");

   

    for(x = 0; x < nTests; x++)

    {

        for(y = 0; y < nTests; y++)

        {

            mean = m_matrix(x,y);

            vector[y] = mean;

        }

       

        CNiMath::Mean(vector, mean);

        m_MeanValues[x] = mean;

        temp.Format(_T("%f"), mean);

        table.WriteToCell(7, x+2, temp);

    }

}

 

 

 

 

 

 

 

 

 

처음

   

 

중요함수