Excel Test

¿¢¼¿ AutomationÀ» »ç¿ëÇÏ¿© ³×ÀÌƼºê C++¿¡¼­ ¿¢¼¿¿¡ Á¢±ÙÇؼ­ °ªÀ» Àаí ÀúÀå Çغ¸ÀÚ.

1. ¿¢¼¿ÀÌ ±ò·Á ÀÖ¾î¾ß ÇÑ´Ù.
2. ºôµå ´ç½ÃÀÇ ¿¢¼¿ÀÇ À§Ä¡¿Í ½ÇÇà ÄÄÇ»ÅÍÀÇ ¿¢¼¿ÀÇ ¼³Ä¡ Æú´õ´Â ´Þ¶óµµ »ó°ü¾øÀ½

C#À» ÀÌ¿ëÇÏ¿© Native C++°ú ¿¬°áÇÏ·Á°í ÇßÀ¸³ª ¹è¿­ 󸮰¡ ³Ê¹« ±ÍÂú¾Æ¼­ ³×ÀÌƼºê C++¿¡¼­ ¿¢¼¿ AutomationÀ» »ç¿ëÇϱâ·Î ÇÏ¿´´Ù.

< Imaprt·Î ¿¢¼¿ÀÇ type library ¾Ë·ÁÁÖ±â >

¿¢¼¿ÀÇ type library¸¦ »ç¿ëÇϱâ import Áö½ÃÀÚ·Î mso.dll°ú ¿¢¼¿ ÆÄÀÏ°ú ±âŸ ÆÄÀÏÀ» ¾Ë·ÁÁØ´Ù.
ºôµå½ÃÀÇ DLL, EXE À§Ä¡¿Í ½ÇÇà½ÃÀÇ Æú´õ À§Ä¡°¡ ´Þ¶óµµ »ó°ü¾ø´Ù.
type library¸¦ ·ÎµùÇϱâ À§Çؼ­´Â #import Áö½ÃÀÚ°¡ ÇÊ¿äÇѰ͸¸ ¼÷ÁöÇÏ°í ´õ ÀÚ¼¼È÷ ¾Ë¾Æ º¸Áø ¾Ê°Ú´Ù.

//#define MY_EXCEL_POSITION

 

#import \

"C:\Program Files\Common Files\Microsoft Shared\OFFICE12\mso.dll" \

rename("DocumentProperties", "DocumentPropertiesXL") \

rename("RGB", "RBGXL")

//Microsoft VBA objects

#import \

"C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\vbe6ext.olb"

//Excel Application objects

 

#ifdef  MY_EXCEL_POSITION

#import "D:\OFFICE12\EXCEL.EXE" \

rename("DialogBox", "DialogBoxXL") rename("RGB", "RBGXL") \

rename("DocumentProperties", "DocumentPropertiesXL") \

rename("ReplaceText", "ReplaceTextXL") \

rename("CopyFile", "CopyFileXL") \

exclude("IFont", "IPicture") no_dual_interfaces

#else

#import "C:\Program Files\Microsoft Office\OFFICE12\EXCEL.EXE" \

rename("DialogBox", "DialogBoxXL") rename("RGB", "RBGXL") \

rename("DocumentProperties", "DocumentPropertiesXL") \

rename("ReplaceText", "ReplaceTextXL") \

rename("CopyFile", "CopyFileXL") \

exclude("IFont", "IPicture") no_dual_interfaces

#endif

< COM ÃʱâÈ­ >

½ÃÀÛÇÏÀÚ¸¶ÀÚ tempTest.csvÆÄÀÏÀ» »èÁ¦ÇÏ´Â °ÍÀº ¿¢¼¿¿¡¼­ csv ÆÄÀÏ Æ÷¸ËÀ¸·Î ÀúÀå ÇÒ ¶§, ¶È°°Àº ÆÄÀÏÀÌ ÀÌ¹Ì Á¸Àç ÇÑ´Ù´Â ¿¡·¯¸Þ¼¼Áö°¡ ¾È¶ßµµ·Ï Çϱâ À§Çؼ­ÀÌ´Ù.

¿¢¼¿Àº COMÀ» ÀÌ¿ëÇؼ­ »ç¿ëÇϹǷΠCOM ÃʱâÈ­ ÇØÁØ´Ù.

    //½ÃÀÛ½Ã

    DeleteFile( GetFullPath( "tempTest.csv" ).c_str() );

    CoInitialize(NULL);

< ¿¢¼¿ °ü·Ã º¯¼ö ¼±¾ð >

C++¿¡¼­ ¿¢¼¿ °ü·Ã º¯¼ö´Â ½º¸¶Æ® Æ÷ÀÎÅÍ Çü½ÄÀ¸·Î ¼±¾ð ÇÑ´Ù.

    HRESULT hr = S_OK;

    Excel::_ApplicationPtr     xlApp;

    Excel::_WorkbookPtr        xlWorkBook;

    Excel::_WorksheetPtr       xlWorkSheet;

    Excel::RangePtr            range;

< ¿¢¼¿ ÆÄÀÏ ¿­±â >

¿¢¼¿ °³Ã¼¸¦ »ý¼ºÇÏ°í , ½ÇÇàÁß º¸ÀÌÁö ¾Êµµ·Ï ÇÑ´Ù. Workbooks->Open()À¸·Î ¿¢¼¿ ÆÄÀÏÀ» ·ÎµùÇÑ´Ù.

    xlApp.CreateInstance(L"Excel.Application");

    xlApp->Visible = false;

    xlWorkBook = xlApp->Workbooks->Open( GetFullPath( "test.xlsx" ).c_str() );

< csv Æ÷¸ËÀÇ ÆÄÀÏ·Î ÀúÀå >

µÎ ¹ø° ÀÎÀÚ´Â ÆÄÀÏ Æ÷¸ËÀ» ³ªÅ¸³½´Ù. Áß¿äÇÑ Æ÷¸Ëº° ÀÎÀÚ´Â ´ÙÀ½°ú °°´Ù.
csv È®ÀåÀÚ -------> Excel::xlCSV
xls È®ÀåÀÚ  -------> Excel::xlExcel8
xlsx È®ÀåÀÚ -------> Excel::xlOpenXMLWorkbook
¿©±â¼­´Â csv·Î ÀúÀåÇÑ´Ù.

    hr = xlWorkBook->SaveAs( GetFullPath( "tempTest.csv" ).c_str(), Excel::xlCSV,

            vtMissing, vtMissing, vtMissing, vtMissing, Excel::xlNoChange,

            vtMissing, vtMissing, vtMissing, vtMissing, vtMissing);

< ¿öÅ© ½ÃÆ® ±¸Çϱâ >

    //¿öÅ© ½ÃÆ® ±¸Çϱâ

    xlWorkSheet = (Excel::_WorksheetPtr)xlWorkBook->Worksheets->GetItem(1);

< À¯È¿ÇÑ Çà°ú ¿­ÀÇ °³¼ö ±¸Çϱâ >

    //column, row °¹¼ö ±¸Çϱâ

    range = xlWorkSheet->UsedRange;

    int column = range->GetColumns()->Count;

    int row = range->GetRows()->Count;

< ¼¿ °ª Àбâ >

¼¿ÀÇ GetItem()À̳ª item¹è¿­À» »ç¿ë ÇÑ´Ù. µÑ´Ù Çà°ú ¿­ÀÇ ¼ø¼­·Î 1ºÎÅÍ ½ÃÀÛÇÑ´Ù. 0, 0 ÀÌ ¾Æ´Ï´Ï ÁÖÀÇÇÏÀÚ.

    //ƯÁ¤°ª Àбâ, IntÇüÀÌ ¾Æ´Ñµ¥ ÀÐÀ¸¸é Á×À¸´Ï Á¶½É  ÇÒ°Í

    int intNum0 = range->Cells->GetItem( 4, 1 );

    int intNum1 = range->Item[4][1];

    OutputDebugPrintf( "¿¢¼¿ INT Àбâ : %d, %d\n", intNum0, intNum1 );

 

    _bstr_t bsStr1 = xlWorkSheet->Cells->GetItem( 3, 3 );    LPCSTR psz1 = NULL;

    if( bsStr1.length() != 0 )

        psz1 = bsStr1;

    _bstr_t bsStr2 = xlWorkSheet->Cells->Item[3][3];        LPCSTR psz2 = NULL;

    if( bsStr2.length() != 0 )

        psz2 = bsStr2;

< ¼¿ °ª ¼öÁ¤Çϱâ >

    //ƯÁ¤°ª ÀúÀåÇϱâ

    range->Item[3][1] = "Çѱۿ­°³";

< ¿¢¼¿ ÆÄÀÏ ÀúÀåÇϱâ >

    xlWorkBook->Save();

< ¿¢¼¿ Á¾·áÇϱâ >

Close()ÀÇ Ã¹ ¹ø° ¸Å°³ º¯¼ö´Â ÀúÀå ÇÒ°ÍÀÎÁö ³ªÅ¸³»´Â Ç÷¡±×ÀÌ´Ù.

    xlWorkBook->Close( VARIANT_FALSE );

    xlApp->Quit();

< ¿¢¼¿ ½º¸¶Æ® Æ÷ÀÎÅÍ ÇØÁ¦ >

NULL·Î ÇØÁ¦ ÇØÁÖÁö ¾ÊÀ¸¸é Á¾·á½Ã assert¹®ÀÌ ¶á´Ù. ÇÏ¿©Æ° NULL·Î ÃʱâÈ­ ÇØÁÖÀÚ.

    range = NULL;

    xlWorkSheet = NULL;

    xlWorkBook = NULL;

    xlApp = NULL;

< COM ¼Ò¸ê >

    CoUninitialize();   

< »õ·Î¿î ¿öÅ© ½ÃÆ® ¸¸µé±â >

»õ·Î¿î ¿öÅ©½ÃÆ®¸¦ ¸¸µå´Â ¿¢¼¿ API´Â Excel::Workbooks::Add( )ÀÌ´Ù. ¸®ÅÏ °ªÀº Excel::_WorkbookPtrÀÌ´Ù.
¿¢¼¿ ÆÄÀÏÀ» »õ·Î »ý¼º ÇÒ ¶§´Â Add( )½ÃÀÇ ¹Ýȯ°ªÀÎ _WorkbookPtr¸¦ ÀÌ¿ëÇÑ´Ù.
¿¢¼¿ ÆÄÀÏÀ» »õ·Ó°Ô »ý¼ºÈÄ ÀúÀåÇÏ´Â ¿¹´Â NewExcel( ) ÇÔ¼ö¸¦ Âü°í ÇÑ´Ù.

    xlWorkBook = xlApp->Workbooks->Add(Excel::xlWorksheet);

ÇÁ·ÎÁ§Æ® : Excel_test.zip