




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Good is good, but better carries it.精益求精,善益求善。VC操作Excel的方法-VC操作Excel的方法(2007-01-0521:18:45)分类:HYPERLINK/s/articlelist_1157904527_2_1.htmlVC,VB,Matlab编程开发A:从classwizard中addclass处fromtypelibrary,去office的安装目录下引入excel.exe(这是office2003的选择,其他版本都是用olb文件),服务器就算引入了,这时会弹出对话框,要求加入一些类,这些类都是一些接口,里面有大量的方法,类的对象表征着
2、excel文件的一个个部分,常用的有这几个_application,workbooks,_workbook,worksheets,_worksheet,Range,它们分别代表不同的意义._application代表了EXCEL服务器,workbooks表示整个Excel服务器(表现为一个.xls文件)里所有的表,(可以通过新建得到多个表,即MDI程序里的一个视窗一样,所有的视窗就是workbooks),_workbook就是一个表,相当于MDI中的一个视窗,worksheets表示所有的表单,每个表都可能有很多表单(建立一个Excel文件之后,打开,可以看到有sheet1,sheet2等,所
3、有这些sheetn就组成了worksheets),_worksheet就表示一个表单,range表示元素的集合.搞清楚上面这几个名词的意思非常重要.B,在dlg.h中声明下面几个变量:_Applicationexlapp;/组件服务器的各个classes_Workbookwbk;Workbookswbks;_Worksheetwht;Worksheetswhts;LPDISPATCHlpDisp;并在app.cpp的InitInstance方法中加入下面两句AfxInitOle();AfxEnableControlContainer();C,这里我没有像上面一样完全用程序来生成一个Excel文
4、件,而是在开始时就在当前目录下生成了一个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将一闪即逝./Openanexcelfil
5、echarpathMAX_PATH;GetCurrentDirectory(MAX_PATH,path);CStringstrPath=path;strPath+=HYPERLINKfile:/VCOpExcel/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
6、();D,与上面第一种方法一样,可以插入记录:UpdateData();/读入数据if(=m_name)/判断名字输入有效MessageBox(Pleaseinputarightname);return;if(0=m_age|100对组件得先进行初始化COM在.app文件的InitInstance()函数加入AfxOleInit();或if(CoInitialize(NULL)!=0)AfxMessageBox(初始化COM支持库失败!);exit(1);VC中操作excel表格HYPERLINKJavaScript:d=document;t=d.selection?(d.selection.
7、type!=None?d.selection.createRange().text:):(d.getSelection?d.getSelection():);void(saveit=window.open(/storeit.aspx?t=+escape(d.title)+&u=+escape(d.location.href)+&c收藏摘要:使用MicrosoftOffice所带的控件来实现代码操作excel表格。操作系统是MicrosoftXP,办公套装是MicrosoftOffice2003,编程环境是MicrosoftVisualStudio6.0,一切都是Microsoft。我最近要将数
8、据库中的内容查询出来放到excel表格以便打印,所以上网找了这方面的内容,这里主要是抛砖引玉。从思路上来看,操作excel表格就是将其打开,然后写入/读出数据,然后关闭。首先创建一个程序(我的例子是一个MFC的单文档程序),在程序的入口处和出口处先作这样两个步骤来支持COM库:在程序入口处CXXXApp:InitInstance()函数AfxEnableControlContainer();语句之后加入下面几行:if(CoInitialize(NULL)!=0)AfxMessageBox(“初始化COM支持库失败!”);exit(1);假如这个条件不通过就不能运行起程序。在程序的出口处CXXX
9、App:ExitInstance()函数return语句之前加入下面这句话:CoUninitialize();来释放COM支持库。这样对COM支持库的代码已经完成。下面要从Office的安装目录中找到对VC操作excel文件的动态库,在某些版本下这个文件是Excel8.olb或者Excel9.olb,在我的版本中是excel.exe这个exe也是动态库的形式,是微软公司主要的文件结果之一。选择vc的View菜单里面的ClassWizad命令,会弹出一个对话框;然后点击AddClass按钮选择Fromatypelibrary,会弹出一个打开对话框,从这里打开Office安装目录下Office11
10、EXCEL.EXE文件,从里面选择几个要用到的类:_Application,Workbooks,_Wrokbook,Worksheets,_WorkSheet,Range,点击OK按钮。会在程序中生成一个excel.h和excel.cpp文件,这些文件中包含了刚才我们选择的几个类的代码。下面介绍一下这几个类:在vc操纵excel的exe动态库里面有好多个对象模型,就是刚才在创建过程中看到的那个列表,但是经常用到的有这么几个:_Application,Workbooks,_Wrokbook,Worksheets,_WorkSheet,Range,Charts和_Chart,最后面的两个是用来操作
11、图表的,我没有用到所以这里也就不记录了。_Application:这里的Application就是Excel本身,众所周知,一个Excel可以包含多个工作簿,每个工作簿又可以包含多个工作表,而每个工作表又可以包含多个区域或者图表,所以这里他们是树型的结构关系,而application最基本的一个功能就是找到它的子项工作簿。果然,我们在引入我们程序的Application类中看到了这样的成员函数:GetWorkbooks()。既然application就是excel,那么打开程序,退出程序,显示/隐藏程序这些基本的操作都可以在这个类的成员函数中找到,果不其然。Workbooks:这个对象是一个容
12、器对象,它里面存放着所有打开的工作簿。因此,我们可以猜测它一定有添加,查找,打开/关闭工作簿的功能。(本程序中使用excel的一个xlt模板来生成一个xls文件就是使用了这个容器对象的添加功能。)_Workbook:这是一个工作簿,也就相当于一个xls文件。Excel可以同时打开多个工作簿,所以工作簿之间必定能够互相切换,每个工作簿可以关联工作表容器并获得工作表的索引。Worksheets:也是一个容器对象,和Workbooks类似。_Worksheet:这个就是我们看到的工作表,比如Sheet1,sheet2等等。Rang:就是我们看到的能选中的方框的大小。而我们所要作的操作基本上是以区域为
13、单位进行的。介绍完这些,就添加一个菜单,来响应操作excel的命令。然后下面附带这个函数的内容,注释还算可以吧,并且附上网上不知道谁写的但是转载极多的一个封装类。HYPERLINK/callmeback/archive/2009/02/18/3906310.aspxviewplainHYPERLINK/callmeback/archive/2009/02/18/3906310.aspxcopytoclipboardHYPERLINK/callmeback/archive/2009/02/18/3906310.aspxprintHYPERLINK/callmeback/archive/2009/
14、02/18/3906310.aspx?_Application_app;_Workbook_workBook;_Worksheet_workSheet;WorksheetsworkSheets;WorkbooksworkBooks;Rangerange;RangecopyFrom;RangecopyTo;if(!_app.CreateDispatch(Excel.Application,NULL)MessageBox(创建Excel服务失败!,信息提示,MB_OK);return;/利用模板建立新文档workBooks.AttachDispatch(_app.GetWorkbooks();_w
15、orkBook.AttachDispatch(workBooks.Add(_variant_t(C:DocumentsandSettings模板.xlt);/你可以自己创建一个模板,并自由设定目录/得到worksheetsworkSheets.AttachDispatch(_workBook.GetWorksheets();/得到workSheet_workSheet.AttachDispatch(workSheets.GetItem(_variant_t(sheet1);/得到拷贝的母板copyFrom.AttachDispatch(_workSheet.GetRange(_variant_
16、t(A3),_variant_t(Q6);copyTo.AttachDispatch(_workSheet.GetRange(_variant_t(A61),_variant_t(A61);/得到全部的cellsrange.AttachDispatch(_workSheet.GetCells();/上边是头/*中间要做的工作有这两项:设置数据和拷贝格式设置数据就是将数据库中查询出来的数据写入表格,拷贝格式就是将表格拷贝到别的地方。*/写入数据range.SetItem(_variant_t(long)3),_variant_t(long)1),_variant_t(写入数据了);range.S
17、etItem(_variant_t(long)5),_variant_t(long)1),_variant_t(重新写入数据了);/拷贝一段区域到另外的一段区域copyFrom.Copy(_variant_t(copyTo);range.SetItem(_variant_t(long)61),_variant_t(long)1),_variant_t(123);/显示excel表格_app.SetVisible(TRUE);/保存为文件_app.SetDisplayAlerts(FALSE);/隐藏弹出的对话框_workSheet.SaveAs(d:Test.xls,vtMissing,vtM
18、issing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing);_app.Quit();/下边是尾/copyFrom.ReleaseDispatch();copyTo.ReleaseDispatch();range.ReleaseDispatch();_workSheet.ReleaseDispatch();workSheets.ReleaseDispatch();_workBook.ReleaseDispatch();workSheets.ReleaseDispatch();_app.ReleaseD
19、ispatch();别人的代码:HYPERLINK/callmeback/archive/2009/02/18/3906310.aspxviewplainHYPERLINK/callmeback/archive/2009/02/18/3906310.aspxcopytoclipboardHYPERLINK/callmeback/archive/2009/02/18/3906310.aspxprintHYPERLINK/callmeback/archive/2009/02/18/3906310.aspx?.h文件:#includecomdef.h#includeexcel.hclassExcel
20、Filepublic:voidShowInExcel(boolbShow);CStringGetCell(intiRow,intiColumn);intGetCellInt(intiRow,intiColumn);intGetRowCount();intGetColumnCount();boolLoadSheet(intiIndex);CStringGetSheetName(intiIndex);staticvoidInitExcel();staticvoidReleaseExcel();intGetSheetCount();boolOpen(CStringFileName);ExcelFil
21、e();virtualExcelFile();protected:private:static_Applicationm_ExcelApp;Workbooksm_Books;_Workbookm_Book;Worksheetsm_sheets;_Worksheetm_sheet;Rangem_Rge;.cpp文件:ExcelFile:ExcelFile()ExcelFile:ExcelFile()m_Rge.ReleaseDispatch();m_sheet.ReleaseDispatch();m_sheets.ReleaseDispatch();m_Book.ReleaseDispatch(
22、);m_Books.ReleaseDispatch();voidExcelFile:InitExcel()/创建Excel2000服务器(启动Excel)if(!m_ExcelApp.CreateDispatch(Excel.Application,NULL)AfxMessageBox(创建Excel服务失败!);exit(1);voidExcelFile:ReleaseExcel()m_ExcelApp.ReleaseDispatch();boolExcelFile:Open(CStringFileName)/打开excel文件/利用模板文件建立新文档m_Books.AttachDispat
23、ch(m_ExcelApp.GetWorkbooks(),true);LPDISPATCHlpDis=NULL;lpDis=m_Books.Add(_variant_t(FileName);/如何判断文件是否打开?if(lpDis)m_Book.AttachDispatch(lpDis);/得到Worksheetsm_sheets.AttachDispatch(m_Book.GetWorksheets(),true);returntrue;returnfalse;intExcelFile:GetSheetCount()returnm_sheets.GetCount();CStringExcel
24、File:GetSheetName(intiIndex)_Worksheetsheet;sheet.AttachDispatch(m_sheets.GetItem(_variant_t(long)iIndex),true);CStringname=sheet.GetName();sheet.ReleaseDispatch();returnname;boolExcelFile:LoadSheet(intiIndex)LPDISPATCHlpDis=NULL;m_Rge.ReleaseDispatch();m_sheet.ReleaseDispatch();lpDis=m_sheets.GetIt
25、em(_variant_t(long)iIndex);if(lpDis)m_sheet.AttachDispatch(lpDis,true);m_Rge.AttachDispatch(m_sheet.GetCells(),true);returntrue;returnfalse;intExcelFile:GetColumnCount()Rangerange;RangeusedRange;usedRange.AttachDispatch(m_sheet.GetUsedRange(),true);range.AttachDispatch(usedRange.GetColumns(),true);i
26、ntcount=range.GetCount();usedRange.ReleaseDispatch();range.ReleaseDispatch();returncount;intExcelFile:GetRowCount()Rangerange;RangeusedRange;usedRange.AttachDispatch(m_sheet.GetUsedRange(),true);range.AttachDispatch(usedRange.GetRows(),true);intcount=range.GetCount();usedRange.ReleaseDispatch();range.ReleaseDispatch();returncount;CStringExcelFile:GetCell(intiRow,intiC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 单头螺栓扳手的工作原理
- 零售专员新员工述职报告
- 哈弗大学面试题库及答案
- 2025至2030年新型板片项目投资价值分析报告
- 2025至2030年摩擦力演示器项目投资价值分析报告
- 广东药厂面试题库及答案
- 2025至2030年扭力仪项目投资价值分析报告
- 2025至2030年多工位小轴承清洗机项目投资价值分析报告
- 分层作业9 探究影响化学平衡的因素
- 《通信》课件-第01章 通信的基本概念与通信的发展
- 液冷数据中心白皮书 2023:数据中心液冷革命解锁未来的数字冰河
- 同等学力申硕英语词汇
- 软件工程导论课件(第六版)(张海潘编著)(1-13章)
- 2023-2024学年广东广州天河区明珠中英文学校数学三上期末联考试题含答案
- 智能仓储管理实战手册
- 提高住院病历完成及时性持续改进(PDCA)
- 气门摇臂轴支座的机械加工工艺及夹具设计毕业设计
- 企业职工代表任命协议书
- 地下管线测绘及数据处理
- 附件1:中国联通动环监控系统B接口技术规范(V3.0)
- 医疗器械经营公司-年度培训计划表
评论
0/150
提交评论