[原创]在VC中彻底玩转Excel如今Excel是越来越重要了,在我们自己开发的程序中不免要和Excel打交道了。利用Automation技术,我们可以在不去了解数据库的情况下玩转Excel,而且你会发现一切竟如此轻松!好了,咱们开始吧,我不喜欢用长篇累牍的代码来故弄玄虚,所以下面的代码都是切中要害的片段,总体上是个连贯的过程,包括启动Excel,读取数据,写入数据,以及最后的关闭Excel,其中还包括了很多人感兴趣的合并单元格的处理。特别说明以下代码需要MFC的支持,而且工程中还要包含EXCEL2000的定义文件:EXCEL9.H,EXCEL9.CPPVC6.0操作Excel(2008-1-2211:26)1.建立一个空的单文档程序;2.加入Excel的库文件:在vc++的view菜单里面选classwizard,然后选Automationtab,再选AddClass,选"Fromatypelibrary.",然后再选你需要的objectlibrary。(forthisexample,ifyouareautomatingExcel97,choosetheMicrosoftExcel8.0ObjectLibrary;thedefaultlocationisC:\ProgramFiles\MicrosoftOffice\Office\Excel8.olb).IfyouareautomatingMicrosoftExcel2000,chooseMicrosoftExcel9.0ObjectLibraryforwhichthedefaultlocationistheC:\ProgramFiles\MicrosoftOffice\Office\Excel9.olb.IfyouareautomatingMicrosoftExcel2002andMicrosoftOfficeExcel2003,theobjectlibraryisembeddedinthefileExcel.exe.ThedefaultlocationforExcel.exeinOffice2002isC:\programFiles\MicrosoftOffice\Office10\Excel.exe.ThedefaultlocationforExcel.exeinOffice2003isC:\programFiles\MicrosoftOffice\Office11\Excel.exe.在ListCtrl框中选中_Application,_Workbook,_Worksheet,Range,Sheets,Workbooks,单击OK,自动生成EXCEL8.H和EXCEL8.CPP文件(或者EXCEL9.H和EXCEL9.CPP或者EXCEL.H和EXCEL.CPP)。3.初始化COM库:在App类的InitInstance中一定要先加上AfxOleInit();因为操作Excel是属于COM自动化,需初始化COM库。4.加入Excel的头文件:文档类的CPP文件中包含头文件#include"excel9.h",是关于Excel中各类的接口定义信息。如果excel9.h,excel9.cpp文件已经生成创建project,将示例文档中的excel9.h,excel9.cpp复制到工程目录,选Project-->Addtoproject-->File-->excel9.h;Project-->Addtoproject-->File-->excel9.cpp;在App的Initinstance中加入AfxOleInit();在Dlg的头文件中加入#include"excel9.h"代码中加入调用COM接口代码,编译即可,*****************************************************************************************************************//*****//变量定义_Applicationapp;Workbooksbooks;_Workbookbook;Worksheetssheets;_Worksheetsheet;Rangerange;RangeiCell;LPDISPATCHlpDisp;COleVariantvResu《COleVariantcovTrue((short)TRUE),covFalse((short)FALSE),covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);//*****//初始化COM的动态连接库if(!AfxOleInit()){AfxMessageBox("无法初始化COM的动态连接库!");return;}//*****//创建Excel2000服务器(启动Excel)if(!app.CreateDispatch("Excel.Application")){AfxMessageBox("无法启动Excel服务器!");return;}app.SetVisible(TRUE);//使Excel可见app.SetUserControl(TRUE);//允许其它用户控制Excel//*****//打开c:\\1.xlsbooks.AttachDispatch(app.GetWorkbooks());lpDisp=books.Open("C:\\\\1.xls",covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional);//*****//得到Workbookbook.AttachDispatch(lpDisp);//*****//得到Worksheetssheets.AttachDispatch(book.GetWorksheets());//*****//得到当前活跃sheet//如果有单元格正处于编辑状态中,此操作不能返回,会一直等待lpDisp=book.GetActiveSheet();sheet.AttachDispatch(lpDisp);//*****//读取已经使用区域的信息,包括已经使用的行数、列数、起始行、起始列RangeusedRange;usedRange.AttachDispatch(sheet.GetUsedRange());range.AttachDispatch(usedRange.GetRows());longiRowNum=ra...