您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 昂贵的VC操作Excel的方法
AthesissubmittedtoinpartialfulfillmentVC操作Excel的方法(2007-01-0521:18:45)分类:VC,VB,Matlab编程开发A:从classwizard中addclass处fromtypelibrary,去office的安装目录下引入excel.exe(这是office2003的选择,其他版本都是用olb文件),服务器就算引入了,这时会弹出对话框,要求加入一些类,这些类都是一些接口,里面有大量的方法,类的对象表征着excel文件的一个个部分,常用的有这几个_application,workbooks,_workbook,worksheets,_worksheet,Range,它们分别代表不同的意义._application代表了EXCEL服务器,workbooks表示整个Excel服务器(表现为一个.xls文件)里所有的表,(可以通过新建得到多个表,即MDI程序里的一个视窗一样,所有的视窗就是workbooks),_workbook就是一个表,相当于MDI中的一个视窗,worksheets表示所有的表单,每个表都可能有很多表单(建立一个Excel文件之后,打开,可以看到有sheet1,sheet2等,所有这些sheetn就组成了worksheets),_worksheet就表示一个表单,range表示元素的集合.搞清楚上面这几个名词的意思非常重要.B,在dlg.h中声明下面几个变量:_Applicationexlapp;//组件服务器的各个classes_Workbookwbk;Workbookswbks;_Worksheetwht;Worksheetswhts;LPDISPATCHlpDisp;并在app.cpp的InitInstance方法中加入下面两句AfxInitOle();AfxEnableControlContainer();C,这里我没有像上面一样完全用程序来生成一个Excel文件,而是在开始时就在当前目录下生成了一个Excel文件,在对话框上我设置了两个按钮,下面是显示按钮的代码://创建Excel服务器if(!exlapp.CreateDispatch(Excel.Application)){AfxMessageBox(无法启动Excel服务器!);return;}COleVariantavar((long)DISP_E_PARAMNOTFOUND,VT_ERROR);exlapp.SetVisible(TRUE);//使Excel可见exlapp.SetUserControl(TRUE);//允许其它用户控制Excel,否则Excel将一闪即逝.//Openanexcelfilecharpath[MAX_PATH];GetCurrentDirectory(MAX_PATH,path);CStringstrPath=path;strPath+=\\VCOpExcel;wbks.AttachDispatch(exlapp.GetWorkbooks());lpDisp=wbks.Open(strPath,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar);wbks.ReleaseDispatch();exlapp.ReleaseDispatch();D,与上面第一种方法一样,可以插入记录:UpdateData();//读入数据if(==m_name)//判断名字输入有效{MessageBox(Pleaseinputarightname);return;}if(0=m_age||100=m_age)//判断年龄输入有效{MessageBox(Pleaseinputarightage);return;}char*p=strupr(_strdup(m_gener));if(strcmp(p,FEMALE)&&strcmp(p,MALE))//判断性别输入有效{MessageBox(Pleaseinputarightgener);return;}Rangerange;RangeusedRange;COleVariantavar((long)DISP_E_PARAMNOTFOUND,VT_ERROR);if(!exlapp.CreateDispatch(Excel.Application))//启动服务器{AfxMessageBox(无法启动Excel服务器!);return;}charpath[MAX_PATH];GetCurrentDirectory(MAX_PATH,path);CStringstrPath=path;strPath+=\\VCOpExcel;wbks.AttachDispatch(exlapp.GetWorkbooks());lpDisp=wbks.Open(strPath,//初始化.avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar);wbk.AttachDispatch(lpDisp);whts.AttachDispatch(wbk.GetWorksheets());lpDisp=wbk.GetActiveSheet();wht.AttachDispatch(lpDisp);usedRange.AttachDispatch(wht.GetUsedRange());range.AttachDispatch(usedRange.GetRows());longiRowNum=range.GetCount();//已经使用的行数range.AttachDispatch(wht.GetCells());range.SetItem(COleVariant(long(iRowNum+1)),COleVariant(long(1)),COleVariant(m_name));range.SetItem(COleVariant(long(iRowNum+1)),COleVariant(long(2)),COleVariant(m_age));range.SetItem(COleVariant(long(iRowNum+1)),COleVariant(long(3)),COleVariant(m_gener));wbk.Save();wbk.Close(avar,COleVariant(strPath),avar);wbks.Close();exlapp.Quit();(完)分享到新浪微博阅读(802)|评论(2)|收藏(0)|打印|举报前一篇:结婚流程(转)后一篇:vcexcel操作补充评论重要提示:警惕虚假中奖信息,点击查看详情免费任选1000款游戏新手卡[发评论]你好:2007-01-1112:30:31我参考你的文章做了一下关于excel的操作但是执行if(!ExcelApp.CreateDispatch(Excel.Application,NULL)){AfxmessageBox(创建Excel服务失败);exit(1);}总是失败。拼命三郎:2007-01-1209:06:12欢迎光临我的blog:对组件得先进行初始化COM在.app文件的InitInstance()函数加入AfxOleInit();或if(CoInitialize(NULL)!=0){AfxMessageBox(初始化COM支持库失败!);exit(1);VC中操作excel表格收藏摘要:使用MicrosoftOffice所带的控件来实现代码操作excel表格。操作系统是MicrosoftXP,办公套装是MicrosoftOffice2003,编程环境是MicrosoftVisualStudio6.0,一切都是Microsoft。我最近要将数据库中的内容查询出来放到excel表格以便打印,所以上网找了这方面的内容,这里主要是抛砖引玉。从思路上来看,操作excel表格就是将其打开,然后写入/读出数据,然后关闭。首先创建一个程序(我的例子是一个MFC的单文档程序),在程序的入口处和出口处先作这样两个步骤来支持COM库:在程序入口处CXXXApp::InitInstance()函数AfxEnableControlContainer();语句之后加入下面几行:if(CoInitialize(NULL)!=0){AfxMessageBox(“初始化COM支持库失败!”);exit(1);}假如这个条件不通过就不能运行起程序。在程序的出口处CXXXApp::ExitInstance()函数return语句之前加入下面这句话:CoUninitialize();来释放COM支持库。这样对COM支持库的代码已经完成。下面要从Office的安装目录中找到对VC操作excel文件的动态库,在某些版本下这个文件是Excel8.olb或者Excel9.olb,在我的版本中是excel.exe这个exe也是动态库的形式,是微软公司主要的文件结果之一。选择vc的View菜单里面的ClassWizad命令,会弹出一个对话框;然后点击AddClass…按钮选择Fromatypelibrary,会弹出一个打开对话框,从这里打开Office安装目录下…\Office11\EXCEL.EXE文件,从里面选择几个要用到的类:_Application,Workbooks,_Wrokbook,Worksheets,_WorkSheet,Range,点击OK按钮。会在程序中生成一个excel.h和excel.cpp文件,这些文件中包含了刚才我们选择的几个类的代码。下面介绍一下这几个类:在vc操纵excel的exe动态库里面有好多个对象模型,就是刚才在创建过程中看到的那个列表,但是经常用到的有这么几个:_Application,Workbooks,_Wrokbook,Worksheets,_WorkSheet,Range,Charts和_Chart,最后面的两个是用来操作图表的,我没有用到所以这里也就不记录了。_Application:这里的Application就是Excel本身,众所周知,一个Excel可以包含多个工作簿,每个工作簿又可以包含多个工作表,而每个工作表又可以包含多个区域或者图表,所以这里他们是树型的结构关系,而application最基本的一个功能就是找到它的子项工作簿。果然,我们在引入我们程序的Application类中看到了这样的成员函数:GetWorkbooks()。既然application就是excel,那么打开程序,退出程序,显示/隐藏程序这些基本的操作都可以在这个类的成员函数中找到,果不其然。Workbooks:这个对象是一个容器对象,它里面存放着所有打开的工作簿。因此,我们可以猜测它一定有添加,查找,打开/关闭工作簿的功能。(本程序中使用excel的一个xlt模板来生成一个xls文件就是使用了这个容器对象的添加功能。)_Workbook:这是一个工作簿,也就相当于一个xls文件。Excel可以同时打开多个工作簿,所以工作簿之间必定能够互相切换,每个工作簿可以关联工作表容器并获得工作表的索引。Worksheets:也是一个容器对象,和Workbooks类似。_Worksheet:这个就是我们看到的工作表,比如Sheet1,sheet2等等。Rang:就是我们看到的能选中的方框的大小。而我们所要作的操作基本上是以区域为单位进行的。介绍完这些,就添加一个菜单,来响应操作excel的命令。然后下面附带这个函数的内容,注释还算可以吧,并且附上网上不知道谁写的但是转载极多的一个封装类。viewplaincopytoclipboardprint?1._Application_app;2._Workbook_workBook;3._Worksheet_workSheet;4.WorksheetsworkSheet
本文标题:昂贵的VC操作Excel的方法
链接地址:https://www.777doc.com/doc-2412645 .html