HOWTO: MFC¸¦ »ç¿ëÇÏ¿© Excel ÀÚµ¿È­ ¹× »õ ÅëÇÕ ¹®¼­ ¸¸µé±â/¼­½Ä ÁöÁ¤Çϱâ

±â¼ú ÀÚ·á: 179706 - ÀÌ ¹®¼­°¡ Àû¿ëµÇ´Â Á¦Ç° º¸±â.
¸ðµÎ È®´ë | ¸ðµÎ Ãà¼Ò

ÀÌ ÆäÀÌÁö¿¡¼­

¿ä¾à

ÀÌ ¹®¼­¿¡¼­´Â Microsoft Visual C++ ¹öÀü 5.0 ¹× 6.0°ú ÇÔ²² ¼³Ä¡µÇ´Â MFC(Microsoft Foundation Class) ¶óÀ̺귯¸® ¹öÀü 4.2¸¦ »ç¿ëÇÏ¿© Microsoft ExcelÀ» ÀÚµ¿È­ÇÏ´Â ¹æ¹ýÀ» º¸¿© ÁÝ´Ï´Ù.

ÀÌ ¹®¼­¿¡¼­´Â OLE ÀÚµ¿È­¸¦ »ç¿ëÇÏ¿© Microsoft Excel ÅëÇÕ ¹®¼­¸¦ ¸¸µé°í ¼­½ÄÀ» ÁöÁ¤ÇÏ´Â ±â¼úÀ» ¼³¸íÇÕ´Ï´Ù. ¿©±â¿¡´Â ¿öÅ©½ÃÆ®¿¡ µ¥ÀÌÅ͸¦ Ãß°¡ÇÏ°í ¼­½ÄÀ» ÁöÁ¤ÇÏ´Â Microsoft Excel Çü½Ä ¶óÀ̺귯¸®ÀÇ ¸î °¡Áö ¸Þ¼­µå/¼Ó¼º¿¡ ´ëÇÑ ¼³¸íÀÌ Æ÷ÇԵ˴ϴÙ.

Microsoft Excel 2000 ¹× 2002 ÀÚµ¿È­¿¡ ´ëÇÑ Âü°í »çÇ×

ÀÌ ¹®¼­¿¡ ³ª¿Í ÀÖ´Â ¿¹Á¦ ÄÚµå´Â Excel 97 °³Ã¼ ¶óÀ̺귯¸®(Excel 8.olb)¿¡¼­ »ý¼ºµÈ Ŭ·¡½º ·¡ÆÛ¸¦ »ç¿ëÇÕ´Ï´Ù. ÀÌ Äڵ带 ¾à°£ ¼öÁ¤Çϸé Excel 2000(Excel9.olb) ¶Ç´Â Excel 2002(Excel.olb)¿ë Ŭ·¡½º ·¡ÆÛ¸¦ »ç¿ëÇÏ´Â ÀÚµ¿È­ Ŭ¶óÀÌ¾ðÆ®¿¡µµ Àû¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. Microsoft Excel 2000 ¶Ç´Â 2002 Çü½Ä ¶óÀ̺귯¸®¿¡¼­ ÀÌ ¹®¼­¿¡ ¼³¸íµÇ¾î ÀÖ´Â ¿¹Á¦ Äڵ带 »ç¿ëÇÏ´Â °Í¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº Microsoft ±â¼ú ÀÚ·áÀÇ ´ÙÀ½ ¹®¼­¸¦ ÂüÁ¶ÇϽʽÿÀ.
224925 INFO: OfficeÀÇ Çü½Ä ¶óÀ̺귯¸®°¡ »õ ¸±¸®½º¿¡¼­ º¯°æµÉ ¼ö ÀÖ´Ù

Ãß°¡ Á¤º¸

ÀÌ ¹®¼­¿¡ ³ª¿Í ÀÖ´Â Äڵ带 MFC .cpp ÆÄÀÏ¿¡ Á¤ÀǵǾî ÀÖ´Â À̺¥Æ®ÀÇ ¸Þ½ÃÁö 󸮱â ÇÔ¼ö¿¡ º¹»çÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª, ÀÌ ÄÚµå´Â Excel8.olb Çü½Ä ¶óÀ̺귯¸®¿¡ Á¤ÀǵǾî ÀÖ´Â IDispatch ÀÎÅÍÆäÀ̽º¿Í ±¸¼º¿ø ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â ÇÁ·Î¼¼½º¸¦ ¼³¸íÇϱâ À§ÇÑ °ÍÀÔ´Ï´Ù. ¿¹Á¦ Äڵ带 Àаí ÀÌÇØÇϸé ÀÌ ¿¹Á¦¸¦ ¼öÁ¤Çϰųª »ç¿ëÀÚ ÀÚ½ÅÀÇ Äڵ带 ÀÛ¼ºÇÏ¿© MFC¸¦ »ç¿ëÇØ¼­ Microsoft Excel 97À» ÀÚµ¿È­ÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù.

ÇÁ·ÎÁ§Æ®¸¦ ¸¸µå´Â ´Ü°è

  1. ´ÙÀ½ Microsoft ±â¼ú ÀÚ·á ¹®¼­¿¡ ³ª¿Í ÀÖ´Â 1 - 12´Ü°è¸¦ ¼öÇàÇÏ¿© Excel8.olb Çü½Ä ¶óÀ̺귯¸®¿¡ Á¤ÀǵǾî ÀÖ´Â IDispatch ÀÎÅÍÆäÀ̽º¿Í ±¸¼º¿ø ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â ¿¹Á¦ ÇÁ·ÎÁ§Æ®¸¦ ¸¸µì´Ï´Ù.
    178749 HOWTO: MFC ¹× Çü½Ä ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ¿© ÀÚµ¿È­ ÇÁ·ÎÁ§Æ® ¸¸µé±â
  2. AutoProjectDlg.cpp ÆÄÀÏÀÇ ¸Ç À§¿¡ ´ÙÀ½ ÇàÀ» Ãß°¡ÇÕ´Ï´Ù.
          #include "excel8.h"
    					
  3. AutoProjectDLG.cpp ÆÄÀÏÀÇ CAutoProjectDlg::OnRun()¿¡ ´ÙÀ½ Äڵ带 Ãß°¡ÇÕ´Ï´Ù.

    ¿¹Á¦ ÄÚµå

          // Commonly used OLE variants.
          COleVariant
                     covTrue((short)TRUE),
                     covFalse((short)FALSE),
                     covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
    
    
          _Application app;
          Workbooks books;
          _Workbook book;
    
          Worksheets sheets;
          _Worksheet sheet;
          Range range;
          Font font;
          Range cols;
    
          // Start Excel and get Application object.
    
          if(!app.CreateDispatch("Excel.Application"))
          {
           AfxMessageBox("Couldn't start Excel and get Application object.");
           return;
          }
    
    
          //Get a new workbook.
          books = app.GetWorkbooks();
          book = books.Add (covOptional);
    
          //Get the first sheet.
          sheets =book.GetSheets();
          sheet = sheets.GetItem(COleVariant((short)1));
    
          //Fill cells A1, B1, C1, and D1 one cell at a time with "headers".
          range = sheet.GetRange(COleVariant("A1"),COleVariant("A1"));
          range.SetValue(COleVariant("First Name"));
          range = sheet.GetRange(COleVariant("B1"),COleVariant("B1"));
          range.SetValue(COleVariant("Last Name"));
          range = sheet.GetRange(COleVariant("C1"),COleVariant("C1"));
          range.SetValue(COleVariant("Full Name"));
          range = sheet.GetRange(COleVariant("D1"),COleVariant("D1"));
          range.SetValue(COleVariant("Salary"));
    
    
          //Format A1:D1 as bold, vertical alignment = center.
          range = sheet.GetRange(COleVariant("A1"), COleVariant("D1"));
          font = range.GetFont();
          font.SetBold(covTrue);
          range.SetVerticalAlignment(
                   COleVariant((short)-4108));   //xlVAlignCenter = -4108
    
          //Fill A2:B6 with an array of values (First & Last Names).
          {
             COleSafeArray saRet;
             DWORD numElements[]={5,2};   //5x2 element array
             saRet.Create(VT_BSTR, 2, numElements);
    
    
             //Fill the 5x2 SafeArray with the following data:
             //   John      Smith
             //   Tom       Brown
             //   Sue       Thomas
             //   Jane      Jones
             //   Adam      Johnson
    
             FillSafeArray(L"John", 0, 0, &saRet);
             FillSafeArray(L"Smith", 0, 1, &saRet);
             FillSafeArray(L"Tom", 1, 0, &saRet);
             FillSafeArray(L"Brown", 1, 1, &saRet);
             FillSafeArray(L"Sue", 2, 0, &saRet);
             FillSafeArray(L"Thomas", 2, 1, &saRet);
    
             FillSafeArray(L"Jane", 3, 0, &saRet);
             FillSafeArray(L"Jones", 3, 1, &saRet);
             FillSafeArray(L"Adam", 4, 0, &saRet);
             FillSafeArray(L"Johnson", 4, 1, &saRet);
    
             range = sheet.GetRange(COleVariant("A2"), COleVariant("B6"));
             range.SetValue(COleVariant(saRet));
    
             saRet.Detach();
          }
    
          //Fill C2:C6 with a relative formula (=A2 & " " & B2).
          range = sheet.GetRange(COleVariant("C2"), COleVariant("C6"));
          range.SetFormula(COleVariant("=A2 & \" \" & B2"));
    
          //Fill D2:D6 with a formula(=RAND()*100000) and apply a number
          //format.
          range = sheet.GetRange(COleVariant("D2"), COleVariant("D6"));
          range.SetFormula(COleVariant("=RAND()*100000"));
          range.SetNumberFormat(COleVariant("$0.00"));
    
          //AutoFit columns A:D.
          range = sheet.GetRange(COleVariant("A1"), COleVariant("D1"));
          cols = range.GetEntireColumn();
          cols.AutoFit();
    
          //Manipulate a variable number of columns for Quarterly Sales Data.
          {
             short NumQtrs;
             CString msg;
             Range resizedrange;
             Interior interior;
             Borders borders;
    
             //Determine how many quarters to display data for.
             for(NumQtrs=1;NumQtrs<=3;NumQtrs++)
             {
                msg.Format("Enter sales data for %d quarter(s)?", NumQtrs);
                if(AfxMessageBox(msg,MB_YESNO)==IDYES)
                {
                   break;
                }
             }
             msg.Format("Displaying data for %d quarters.", NumQtrs);
             AfxMessageBox(msg);
    
             //Starting at E1, fill headers for the number of columns selected.
             range = sheet.GetRange(COleVariant("E1"), COleVariant("E1"));
             resizedrange = range.GetResize(covOptional, COleVariant(NumQtrs));
             resizedrange.SetFormula(
                    COleVariant("=\"Q\" & COLUMN()-4 & CHAR(10) & \"Sales\""));
             //Change the Orientation and WrapText properties for the headers.
             resizedrange.SetOrientation(COleVariant((short)38));
             resizedrange.SetWrapText(covTrue);
             //Fill the interior color of the headers.
             interior = resizedrange.GetInterior();
             interior.SetColorIndex(COleVariant((short)36));
    
             //Fill the columns with a formula and apply a number format.
             range = sheet.GetRange(COleVariant("E2"), COleVariant("E6"));
             resizedrange = range.GetResize(covOptional, COleVariant(NumQtrs));
             resizedrange.SetFormula(COleVariant("=RAND()*100"));
             resizedrange.SetNumberFormat(COleVariant("$0.00"));
    
             //Apply borders to the Sales data and headers.
             range = sheet.GetRange(COleVariant("E1"), COleVariant("E6"));
             resizedrange= range.GetResize(covOptional, COleVariant(NumQtrs));
             borders = resizedrange.GetBorders();
             borders.SetWeight(COleVariant((short)2));   //xlThin = 2
    
             //Add a Totals formula for the Quarterly sales data and apply a
             //border.
             range = sheet.GetRange(COleVariant("E8"), COleVariant("E8"));
             resizedrange = range.GetResize(covOptional, COleVariant(NumQtrs));
             resizedrange.SetFormula(COleVariant("=SUM(E2:E6)"));
             borders = resizedrange.GetBorders();
             {
                Border bottomborder;
                bottomborder = borders.GetItem((long)9);
                bottomborder.SetLineStyle(
                               COleVariant((short)-4119));   //xlDouble = -4119
                bottomborder.SetWeight(
                               COleVariant((short)4));       //xlThick = 4
    
             }
          }
    
          //Make the application visible and give the user control of
          //Microsoft Excel.
          app.SetVisible(TRUE);
          app.SetUserControl(TRUE);
    					
  4. AutoProjectDLG.cppÀÇ CAutoProjectDlg::OnRun() ¾Õ¿¡ ´ÙÀ½ ÇÔ¼ö¸¦ Ãß°¡ÇÕ´Ï´Ù.

    ¿¹Á¦ ÄÚµå

          void FillSafeArray(OLECHAR FAR* sz, int iRow, int iCol,
                             COleSafeArray* sa)
          {
    
             VARIANT v;
             long index[2];
    
             index[0] = iRow;
             index[1] = iCol;
    
             VariantInit(&v);
             v.vt = VT_BSTR;
             v.bstrVal = SysAllocString(sz);
             sa->PutElement(index, v.bstrVal);
             SysFreeString(v.bstrVal);
             VariantClear(&v);
    
          }
    					
  5. Developer Studio¿¡¼­ ÀÀ¿ë ÇÁ·Î±×·¥À» ½ÇÇàÇÕ´Ï´Ù. ¿¹Á¦°¡ ´ëÈ­ »óÀÚ ±â¹Ý ÀÀ¿ë ÇÁ·Î±×·¥À» ¸¸µé¾î ´ëÈ­ »óÀÚ°¡ ³ªÅ¸³ª¸é Run ´ÜÃ߸¦ ´©¸¨´Ï´Ù.




Microsoft Á¦Ç° °ü·Ã ±â¼ú Àü¹®°¡µé°ú ¿Â¶óÀÎÀ¸·Î Á¤º¸¸¦ ±³È¯ÇϽ÷Á¸é Microsoft ´º½º ±×·ì¿¡ Âü¿©ÇϽñ⠹ٶø´Ï´Ù.

¼Ó¼º

±â¼ú ÀÚ·á: 179706 - ¸¶Áö¸· °ËÅä: 2011³â 9¿ù 18ÀÏ ÀÏ¿äÀÏ - ¼öÁ¤: 3.0
º» ¹®¼­ÀÇ Á¤º¸´Â ´ÙÀ½ÀÇ Á¦Ç°¿¡ Àû¿ëµË´Ï´Ù.
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Foundation Class Library 4.2
  • Microsoft Office XP Developer Edition
  • Microsoft Office 2000 Developer Edition
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 97 Standard Edition
Ű¿öµå:?
kbautomation kbhowto kbinterop KB179706

Çǵå¹é º¸³»±â