¿¢¼¿ 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] = "Çѱۿ°³";
|
< ¿¢¼¿ ÆÄÀÏ ÀúÀåÇϱâ >
< ¿¢¼¿ Á¾·áÇϱâ >
Close()ÀÇ Ã¹ ¹ø° ¸Å°³ º¯¼ö´Â ÀúÀå ÇÒ°ÍÀÎÁö ³ªÅ¸³»´Â Ç÷¡±×ÀÌ´Ù.
xlWorkBook->Close( VARIANT_FALSE );
xlApp->Quit();
|
< ¿¢¼¿ ½º¸¶Æ® Æ÷ÀÎÅÍ ÇØÁ¦ >
NULL·Î ÇØÁ¦ ÇØÁÖÁö ¾ÊÀ¸¸é Á¾·á½Ã assert¹®ÀÌ ¶á´Ù. ÇÏ¿©Æ° NULL·Î ÃʱâÈ ÇØÁÖÀÚ.
range = NULL;
xlWorkSheet = NULL;
xlWorkBook = NULL;
xlApp = NULL;
|
< COM ¼Ò¸ê >
< »õ·Î¿î ¿öÅ© ½ÃÆ® ¸¸µé±â >
»õ·Î¿î ¿öÅ©½ÃÆ®¸¦ ¸¸µå´Â ¿¢¼¿ API´Â Excel::Workbooks::Add( )ÀÌ´Ù. ¸®ÅÏ °ªÀº Excel::_WorkbookPtrÀÌ´Ù. ¿¢¼¿ ÆÄÀÏÀ» »õ·Î »ý¼º ÇÒ ¶§´Â Add( )½ÃÀÇ ¹Ýȯ°ªÀÎ _WorkbookPtr¸¦ ÀÌ¿ëÇÑ´Ù. ¿¢¼¿ ÆÄÀÏÀ» »õ·Ó°Ô »ý¼ºÈÄ ÀúÀåÇÏ´Â ¿¹´Â NewExcel( ) ÇÔ¼ö¸¦ Âü°í ÇÑ´Ù.
xlWorkBook = xlApp->Workbooks->Add(Excel::xlWorksheet);
|
ÇÁ·ÎÁ§Æ® : Excel_test.zip
|