利用COM编程实现在VC中对Excel2003的导入和导出
1、导入excell.exe相关组件:
a、在添加类中选择typelib中的MFC类;
b、选择office安装目录下的excell.exe;
c、导入如下的组件:
需要选_Application、_Workbook、Workbooks、_Worksheet、Worksheets、Range
2、在stdafx.h下添加如下头文件
::CoInitialize(NULL);//export to excel//get the export file pathCString fname = L"c:\\2.xls";//保存到c:\\2.xls//define the objectsCApplication objApp;CWorkbooks objBooks;CWorkbook objBook;CWorksheets objSheets;CWorksheet objSheet;CRange objRange;COleVariant covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);COleVariant covTrue((short)TRUE),covFalse((short)FALSE),varFormat((short)-4143),varCenter((short)-4108),varLeft((short)-4131),varText(L"TEXT",VT_BSTR);//creat excelobjApp.m_bAutoRelease = TRUE;if (!objApp.CreateDispatch(L"Excel.Application")){AfxMessageBox(L"Failed to connect to excel!");return ;}//get WorkbooksobjBooks = objApp.get_Workbooks();//open excel fileobjBook.AttachDispatch(objBooks.Add(_variant_t("")));//get worksheetsobjSheets = objBook.get_Worksheets();//get worksheetobjSheet = objSheets.get_Item((_variant_t)short(1));//set worksheet nameCString sheetname = L"sheetname";objSheet.put_Name(sheetname);//write to cellsCString s1;CString s;pair<long,long> sNum;CRange objRange1;int row,col;CString strRow;CString strName = fname;char cCell;for (row = 1;row <= strResultNum.first;row++){for (col = 1;col <= strResultNum.second;col++){//get the unit headcCell = 'A' + col - 1;strName.Format(_T("%c"),cCell);strRow.Format(_T("%d"),row);strName += strRow;s1.Format(strName);objRange1 = objSheet.get_Range(_variant_t(s1),_variant_t(s1));//get the unit valuesNum.first = row;sNum.second = col;s = strResult[sNum];objRange1.put_FormulaR1C1(_variant_t(s));}}//saveobjBook.SaveAs(_variant_t(fname),varFormat,covOptional,covOptional,covOptional,covOptional,0,covOptional,covOptional,covOptional,covOptional,covOptional);//releaseobjApp.Quit();objRange.ReleaseDispatch();objSheet.ReleaseDispatch();objSheets.ReleaseDispatch();objBook.ReleaseDispatch();objBooks.ReleaseDispatch();