最近由于工作需要,不得不操作Excel,包括基本的数据输入输出、字体设置、颜色设置、单元格的合并、填充色的设置,当然还包括图表的生成以及渐近线的操作等。折腾了许久,项目终于完成了^_^。现在将学习操作Excel的点点滴滴记录下来和大家一同分享,也作为自己的一次总结。

1、Excel的对象模型(有人称其为层次结构)

打开一个Excel工作表,点击“工具”->“宏”->“Visual Basic 编辑器”选项打开VB的编辑器,打开帮助文档,里面“Microsoft Excel Visual Basic 参考”下的“Microsoft Excel 对象模型”展示了完整的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来操作Excel

2、Excel库的插入

在我们MFC的工程中,按Ctrl+W打开MFC类向导对话框,点击“Add Class...”->“From a type Library...”,找到你所使用的excel类型库,我使用的在目录C:/Program Files/Microsoft Office/OFFICE11下的“EXCEL.EXE”文件,查找时文件类型选“All Files”,然后添加我们所需要的类,通常以上列举的前6类是必须的,其它的需要时再添加。我不认为全部添加是一种好的做法,一个我觉得很乱,另外生成的excel.cpp文件会很大。我建议浏览一遍这些类,这样当你做些操作时可以更清楚的知道需要添加哪些类。添加完需要的类后,我们就可以来做一些基本的操作了。

3、Com支持库的初始化

通常在App的InitInstance()里面加入初始化和关闭COM库的操作,在DoModal()调用之前加入初始化的代码:

if (CoInitialize(NULL) != 0) { AfxMessageBox("初始化COM支持库失败!"); exit(1); }

在return之前加入CoUninitialize(); 关闭CON库。

4、代码演示一些基本的操作

首先别忘了包含头文件“excel.h”,若用到_variant_t()时,需要包含头文件“comdef.h”和“comutil.h”,否则会出现错误:

error C2065: '_variant_t' : undeclared identifier”。

下面的代码包括了一些基本的操作:

// 变量的定义 _Application app; Workbooks books; _Workbook book; Worksheets sheets; _Worksheet sheet; Range range; LPDISPATCH lpDisp; COleVariant vResult; CString str = ""; COleVariant covTrue((short)TRUE), covFalse((short)FALSE), covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); //创建Excel 2003服务器(启动Excel) if (!app.CreateDispatch("Excel.Application",NULL)) { AfxMessageBox("Create Excel service failure!"); return; } // 设置为FALSE时,后面的app.Quit();注释要打开 // 否则EXCEL.EXE进程会一直存在,并且每操作一次就会多开一个进程 app.SetVisible(TRUE); books.AttachDispatch(app.GetWorkbooks(),true); /* * 打开一个工作簿。 * Excel 2000 只需要13个参数就行,Excel 2003需要15个参数 */ lpDisp = books.Open("E://test.xls", covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional); ASSERT(lpDisp); book.AttachDispatch(lpDisp); // 得到Worksheets sheets.AttachDispatch(book.GetWorksheets(),true); // 得到Worksheet sheet.AttachDispatch(sheets.GetItem(_variant_t((short)(1)))); // 得到全部Cells range.AttachDispatch(sheet.GetCells(),true); // 往单元格A1里写入字符串数据,就像操作矩阵一样,第1行第1列 range.SetItem(_variant_t((LONG)1),_variant_t((LONG)1),_variant_t("hello word!")); // 往单元格A2里写入时间数据 range.AttachDispatch(sheet.GetRange(_variant_t("A2"), _variant_t("A2")),true); range.SetValue2(_variant_t("2011/02/15")); // 往单元格A3~A6里写入浮点数据 range.AttachDispatch(sheet.GetRange(_variant_t("A3"), _variant_t("A6")),true); range.SetValue2(_variant_t((double)3.14)); // 设置单元格的列宽为12 range.AttachDispatch(sheet.GetRange(_variant_t("A1"), _variant_t("A1")),true); range.SetColumnWidth(_variant_t((long)12)); // 所有单元格居中显示 range.AttachDispatch(sheet.GetCells(),true); range.SetHorizontalAlignment(_variant_t((long)-4108)); // -4108:居中,-4131:靠左,-4152:靠右 range.SetVerticalAlignment(_variant_t((long)-4108)); // -4108:居中,-4160:靠上,-4107:靠下 // 读取单元格的数据,第4行第1列 range.AttachDispatch(range.GetItem(_variant_t((long)(4)),_variant_t((long)(1))).pdispVal ); vResult =range.GetValue(covOptional); switch (vResult.vt) { case VT_BSTR: // 字符串 str=vResult.bstrVal; break; case VT_R8: // 8字节的数字 str.Format("%f",vResult.dblVal); break; case VT_DATE: // 时间格式 SYSTEMTIME st; VariantTimeToSystemTime(vResult.date, &st); break; case VT_EMPTY: // 单元格空的 str=""; break; } //MessageBox(str); Font ft; // 要插入excel类库里面的Font类,下面类似 range.AttachDispatch(sheet.GetRange(_variant_t("A3"), _variant_t("A5")),true); ft.AttachDispatch(range.GetFont()); ft.SetName(_variant_t("华文行楷")); // 字体 ft.SetSize(_variant_t((long)12)); // 字号 //ft.SetColorIndex(_variant_t((long)3)); // 字的颜色: 红色 ft.SetColor( _variant_t((long) RGB(255, 0, 0) ) ); ft.SetBold(_variant_t((long)1)); // 1:粗体,0:非粗体 Interior it; // 底色设置 range.AttachDispatch(sheet.GetRange(_variant_t("C3"), _variant_t("E6")),true); it.AttachDispatch(range.GetInterior()); it.SetColorIndex(_variant_t((long)20)); // 底色设置为浅青色 Borders borders; // 先设置区域内所有单元格的边框 borders = range.GetBorders(); borders.SetColorIndex(_variant_t((long)1)); borders.SetLineStyle(_variant_t((long)1)); borders.SetWeight(_variant_t((long)2)); // 然后设置外边框 // LineStyle=线型(1~13) Weight=线宽 ColorIndex=线的颜色(-4105为自动, 1为黑色) range.BorderAround(_variant_t((long)9),_variant_t((long)1),_variant_t((long)1),vtMissing); range.AttachDispatch(sheet.GetRange(_variant_t("C8"), _variant_t("D9")),true); // 合并单元格 range.Merge(_variant_t((long)0)); book.Save(); // 保存Excel的内容 // app.SetDisplayAlerts(false); // 不弹出对话框询问是否保存 // app.Quit(); // 退出 //释放对象 range.ReleaseDispatch(); sheet.ReleaseDispatch(); sheets.ReleaseDispatch(); book.ReleaseDispatch(); books.ReleaseDispatch(); app.ReleaseDispatch();

上面就是一些对于Excel的基本操作,如果有什么问题希望大家能够指出!

VC操作Excel之基本操作相关推荐

  1. VC操作Excel文件编程相关内容总结

    最近在做个数据库程序,因为有些数据用户要求导出到Excel文件显示(需要报给其他单位).所以查阅了一下相关的VC的Excel编程操作,总结一下吧:(所有资料来源于网络) 利用VC操作Excel的方法至 ...

  2. VC操作excel表格

    VC操作excel表格(一) 1.The require files When you start to program in VC, you must have the lib files of E ...

  3. VC 操作excel

    简介 通过本文及配套示例源码你可以更加灵活的控制Excel表格文件,其中包括创建新Excel文件.写入表格数据.读取表格数据(包括对原建Excel文件自已手工添加的行.列数据的准确读取),删除已有Ex ...

  4. VC操作Excel之sercies、Trendline

    演示一下如何通过VC操作Excel生成下面这样的一个图表,它有两个系列,每个系列都拥有自己的X轴数据和Y轴数据,同时显示其线性的渐近线(TrendLine)以及获取其渐近线公式,因为在项目当中有时候需 ...

  5. VC操作Excel收集

    VC操作Excel的方法(2007-01-05 21:18:45)      A:从classwizard中add class处from type library,去office的安装目录下引入exc ...

  6. 使用VB或VC操作Excel 2003

    1.VB操作EXCEL2003 [vb] view plaincopy '*************************************************************** ...

  7. vc操作excel,包括合并单元格,新增,删除sheet,设置字体,底色(OLE/COM)

    1.制作应用软件的时候,经常要把结果以报表的形式输出,当前使用较为广泛的当然是Excel表格,本文简略介绍在VC++6.0中如何使用Excel2003的库函数并对其进行编程.先创建一个对话框工程,命名 ...

  8. vc操作Excel。

    pc操作系统情况:     Windows XP,office 2003,vc6 经过半下午的搜索发现了vc操作Excel的几种方法 1.ODBC.     暂时还没有试. 2.OLE,即com的方式 ...

  9. VC操作Excel之用ChartWizard自动生成图表

    在用VC操作Excel的时候,生成图表有时是不可避免的,这里记下如何通过ChartWizard来简单生成一个图表.首先我们得了解一下图表的组成结构,一个简单的chart通常包括标题.绘图区.图例.数值 ...

最新文章

  1. 第一家线下场景大数据平台Anchor-Point诞生
  2. 机器学习之深入理解SVM
  3. 虚方法(virtual)和抽象方法(abstract)的区别
  4. iOS-项目开发1-UIImage
  5. ironpython2.7_IronPython
  6. LAN7500 Mac OS X Device Driver
  7. C语言编程:如何计算二叉树叶子结点数目?
  8. Solidworks 2015 安装教程
  9. 该死的clear 根本不释放内存,怎么才能释放泛型LIST的内存?
  10. 每日词根——vad(走)
  11. Redis数据库中Hash哈希的介绍,常用命令和应用场景
  12. 江苏大专计算机考试,江苏省教育考试院2020年高职(专科)注册入学申请入口...
  13. Java程序设计 多线程 基础知识题
  14. 【测试工程师】关于软件测试的10条建议
  15. 敏捷开发:编写开发文档的利与弊
  16. 终于我用JOL打破了你对java对象的所有想象
  17. 计算机网络--万维网实验
  18. 常用计算机字长,计算机字长是什么意思
  19. R语言回归分析-回归诊断
  20. Tushare所有版块数据获取(python)

热门文章

  1. MacOS Homebrew使用文档
  2. Ubuntu16.04 LTS安装NVIDIA显卡驱动
  3. LINE 不被封锁的技巧
  4. 算法题:鸡蛋掉落(leetcode 887题)
  5. matlab保存高清图片png、svg、pdf等
  6. excel的批量填充(工作日、数字)
  7. python视频解析库_python某音短视频无水印解析
  8. 大秦:开局签到满级剑术天赋(二)
  9. IBM存储产品常见问题汇总
  10. syzkaller 源码阅读笔记3(syz-fuzzer)