您好,欢迎访问三七文档
VC操作Excel之基本操作、Excel的对象模型(有人称其为层次结构)打开一个Excel工作表,点击“工具”-“宏”-“VisualBasic编辑器”选项打开VB的编辑器,打开帮助文档,里面“MicrosoftExcelVisualBasic参考”下的“MicrosoftExcel对象模型”展示了完整的Excel的层次结构,是不是有点类似于MFC的继承图表啊?利用帮助文档我们可以找到一些需要的知识,下面介绍一些类:_Application:表示整个的Excel应用程序,包含一个工作簿集合Workbooks:工作簿集合,包含N个工作簿(Workbook)_Workbook:工作簿,包含一个工作表(sheets)集合Worksheets:工作表集合,包含N个工作表_Worksheet:工作表,也就是我们在Excel中看到的Sheet1、Sheet2、Sheet3,它是我们操作Excel的基本单位Range:这是单元格的集合,我们知道Excel是由一个个的单元格组成的,通过Range来操作单元格Font:用于设置单元格的字体、颜色、字号、粗体设置Interior:设置底色Boards:设置区域内所有单元格的边框,如果要设置一组区域的外边框的话用Rang-BorderAround设置下面用一个具体的例子来说明怎么通过MFC来操作Excel2、Excel库的插入在我们MFC的工程中,按Ctrl+W打开MFC类向导对话框,点击“AddClass...”-“FromatypeLibrary...”,找到你所使用的excel类型库,我使用的在目录C:/ProgramFiles/MicrosoftOffice/OFFICE11下的“EXCEL.EXE”文件,查找时文件类型选“AllFiles”,然后添加我们所需要的类,通常以上列举的前6类是必须的,其它的需要时再添加。我不认为全部添加是一种好的做法,一个我觉得很乱,另外生成的excel.cpp文件会很大。我建议浏览一遍这些类,这样当你做些操作时可以更清楚的知道需要添加哪些类。添加完需要的类后,我们就可以来做一些基本的操作了。3、Com支持库的初始化通常在App的InitInstance()里面加入初始化和关闭COM库的操作,在DoModal()调用之前加入初始化的代码:[cpp]viewplaincopyprint?1.if(CoInitialize(NULL)!=0)2.{3.AfxMessageBox(初始化COM支持库失败!);4.exit(1);5.}if(CoInitialize(NULL)!=0){AfxMessageBox(初始化COM支持库失败!);exit(1);在return之前加入CoUninitialize();关闭CON库。4、代码演示一些基本的操作首先别忘了包含头文件“excel.h”,若用到_variant_t()时,需要包含头文件“comdef.h”和“comutil.h”,否则会出现错误:“errorC2065:'_variant_t':undeclaredidentifier”。下面的代码包括了一些基本的操作:[cpp]viewplaincopyprint?1.//变量的定义2._Applicationapp;3.Workbooksbooks;4._Workbookbook;5.Worksheetssheets;6._Worksheetsheet;7.Rangerange;8.LPDISPATCHlpDisp;9.COleVariantvResult;10.11.CStringstr=;12.13.COleVariant14.covTrue((short)TRUE),15.covFalse((short)FALSE),16.covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);17.18.//创建Excel2003服务器(启动Excel)19.if(!app.CreateDispatch(Excel.Application,NULL))20.{21.AfxMessageBox(CreateExcelservicefailure!);22.return;23.}24.25.//设置为FALSE时,后面的app.Quit();注释要打开26.//否则EXCEL.EXE进程会一直存在,并且每操作一次就会多开一个进程27.app.SetVisible(TRUE);28.books.AttachDispatch(app.GetWorkbooks(),true);29.30./*31.*打开一个工作簿。32.*Excel2000只需要13个参数就行,Excel2003需要15个参数33.*/34.lpDisp=books.Open(E://test.xls,35.covOptional,covOptional,covOptional,covOptional,36.covOptional,covOptional,covOptional,covOptional,37.covOptional,covOptional,covOptional,covOptional,38.covOptional,covOptional);39.ASSERT(lpDisp);40.41.book.AttachDispatch(lpDisp);42.43.//得到Worksheets44.sheets.AttachDispatch(book.GetWorksheets(),true);45.46.//得到Worksheet47.sheet.AttachDispatch(sheets.GetItem(_variant_t((short)(1))));48.49.//得到全部Cells50.range.AttachDispatch(sheet.GetCells(),true);51.52.53.//往单元格A1里写入字符串数据,就像操作矩阵一样,第1行第1列54.range.SetItem(_variant_t((LONG)1),_variant_t((LONG)1),_variant_t(helloword!));55.56.//往单元格A2里写入时间数据57.range.AttachDispatch(sheet.GetRange(_variant_t(A2),_variant_t(A2)),true);58.range.SetValue2(_variant_t(2011/02/15));59.60.//往单元格A3~A6里写入浮点数据61.range.AttachDispatch(sheet.GetRange(_variant_t(A3),_variant_t(A6)),true);62.range.SetValue2(_variant_t((double)3.14));63.64.//设置单元格的列宽为1265.range.AttachDispatch(sheet.GetRange(_variant_t(A1),_variant_t(A1)),true);66.range.SetColumnWidth(_variant_t((long)12));67.68.//所有单元格居中显示69.range.AttachDispatch(sheet.GetCells(),true);70.range.SetHorizontalAlignment(_variant_t((long)-4108));//-4108:居中,-4131:靠左,-4152:靠右71.range.SetVerticalAlignment(_variant_t((long)-4108));//-4108:居中,-4160:靠上,-4107:靠下72.73.//读取单元格的数据,第4行第1列74.range.AttachDispatch(range.GetItem(_variant_t((long)(4)),_variant_t((long)(1))).pdispVal);75.vResult=range.GetValue(covOptional);76.77.switch(vResult.vt)78.{79.caseVT_BSTR://字符串80.str=vResult.bstrVal;81.break;82.caseVT_R8://8字节的数字83.str.Format(%f,vResult.dblVal);84.break;85.caseVT_DATE://时间格式86.SYSTEMTIMEst;87.VariantTimeToSystemTime(vResult.date,&st);88.break;89.caseVT_EMPTY://单元格空的90.str=;91.break;92.}93.//MessageBox(str);94.95.Fontft;//要插入excel类库里面的Font类,下面类似96.97.range.AttachDispatch(sheet.GetRange(_variant_t(A3),_variant_t(A5)),true);98.ft.AttachDispatch(range.GetFont());99.ft.SetName(_variant_t(华文行楷));//字体100.ft.SetSize(_variant_t((long)12));//字号101.//ft.SetColorIndex(_variant_t((long)3));//字的颜色:红色102.ft.SetColor(_variant_t((long)RGB(255,0,0)));103.ft.SetBold(_variant_t((long)1));//1:粗体,0:非粗体104.105.Interiorit;//底色设置106.107.range.AttachDispatch(sheet.GetRange(_variant_t(C3),_variant_t(E6)),true);108.it.AttachDispatch(range.GetInterior());109.it.SetColorIndex(_variant_t((long)20));//底色设置为浅青色110.111.Bordersborders;//先设置区域内所有单元格的边框112.borders=range.GetBorders();113.borders.SetColorIndex(_variant_t((long)1));114.borders.SetLineStyle(_variant_t((long)1));115.borders.SetWeight(_variant_t((long)2));116.117.//然后设置外边框118.//LineStyle=线型(1~13)Weight=线宽ColorIndex=线的颜色(-4105为自动,1为黑色)119.range.BorderAround(_variant_t((long)9),_variant_t((long)1),_variant_t((long)1),vtMissing);120.121.range.AttachDispatch(sheet.GetRange(_variant_t(C8),_variant_t(D9)),true);122.//合并单元格123.range.Merge(_variant_t((long)0));124.125.126.book.Save();//保存Excel的内容127.//app.SetDisplayAlerts(false);//不弹出对话框询问是否保存128.//app.Quit();//退出129.130.//释放对象131.range.ReleaseDispatch();1
本文标题:VC操作Excel
链接地址:https://www.777doc.com/doc-3378056 .html