最近在做一个读取Excel的功能,之前也做过相关的,但总是零零闪闪的,趁着正在劲头上,归纳一下:

利用Automation添加相关的类,在Excel2010中可以在安装文件夹下直接点击Excel.exe 会生成很多类,建议只导入需要用到的类,不然会很卡。

用到的类和变量说明:CApplication m_ExlApp;//应用程序类,对应每一个Excel应用程序

CWorkbook wbk;//工作簿
                                  CWorkbooks wbks;//对应每个Exel文档

CWorksheets whts ,m_Wheet;//对应每个文档的每一个sheet表
                                  CRange range;//单元格范围,运用最广泛,获取单元格范围
                                  ColeVarinat var;//读取每个零时变量

  1. 加载程序:if(!m_ExlApp.CreateDispatch("Excel.Application"))
                            {
                                  AfxMessageBox("无法启动Excel服务器!");
                                  return;
                            }
  2. 连接工作簿、工作表等      COleVariant  avar((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
                                      m_ExlApp.put_Visible(TRUE);//使Excel可见
                                      m_ExlApp.put_UserControl(TRUE);//允许其它用户控制Excel,否则Excel将一闪即逝.
                                      wbks.AttachDispatch(m_ExlApp.get_Workbooks());
                                      wbk =wbks.Open(m_StrExcelPath,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar);
                                      whts = wbk.get_Sheets();
                                      m_Wheet = whts.get_Item(_variant_t((short)1));
                                      range.AttachDispatch(m_Wheet.get_UsedRange());
  3. 获得行高、列宽   Var = RangRow.get_RowHeight();
                           CString strHeight;  
                           strHeight.Format(CString((LPCSTR)(_bstr_t)(_variant_t)Var));
                           float fHeight = _tstof(strHeight)*9600/7200;  //转换为像素  列宽同理
  4. 获取单元格批注   CComment com;//批注类
                          com = range.get_Comment();    
                          CString strCom = _T("");
                          strCom = com.Text(vtMissing,vtMissing,vtMissing);
  5. 获取单元格是否含有边框线  CRange RCellBorder;
                                       CBorders BCellBorders;
                                       CBorder BCellBorder;
                                       COleVariant varBorderInfo;
                                       RCellBorder.AttachDispatch(m_Wheet.get_Cells());
                                       RCellBorder.AttachDispatch(RCellBorder.get_Item(COleVariant(nRow),COleVariant(nCol)).pdispVal);
                                       BCellBorders = RCellBorder.get_Borders();
                                       for (long i = 7;i < 11;i++)
                                       {//Left:7 Top:8 Bottom:9 Right 10
                                            BCellBorder = BCellBorders.get_Item(i);
                                            varBorderInfo = BCellBorder.get_LineStyle();
                                             if (-4142 != varBorderInfo.lVal)
                                             {//说明含有边界值,具体的可以自己查看                                            
                                             }
                                        }//从左到右依次判断,并给报表的对应单元格赋值
  6. 获取单元格所含公式       CRange RFormula;
                                    COleVariant varFormula;
                                    CString strFormula = _T("");
                                    RFormula.AttachDispatch(m_Wheet.get_Cells());
                                    RFormula.AttachDispatch(RFormula.get_Item(COleVariant(nRow),COleVariant(nCol)).pdispVal);
                                    varFormula = RFormula.get_Formula();
                                    strFormula = varFormula.bstrVal;
                                    if (0 != strFormula.CompareNoCase(""))
                                   {
                                    }
                                    RFormula.ReleaseDispatch();
  7. 获取字体信息               LOGFONT *pLogFont = NULL; 字体信息存放在这个指针中
                                    CFont0 fTextFont;
                                   CRange RTextFont;
                                   COleVariant varFontInfo;
                                   RTextFont.AttachDispatch(m_Wheet.get_Cells());
                                   RTextFont.AttachDispatch(RTextFont.get_Item(COleVariant(nRow),COleVariant(nCol)).pdispVal);
                                   fTextFont = RTextFont.get_Font();
                                   pCell = (CGridCell*)m_npGridCtrl->GetCell(nRow,nCol);//获取原有单元格的字体
                                   pLogFont = pCell->GetFont();

    //字体名称
                                  varFontInfo = fTextFont.get_Name();
                                  CString strFontName(varFontInfo.bstrVal);
                                  strcpy(pLogFont->lfFaceName,strFontName);

    //字体高度
                                  varFontInfo = fTextFont.get_Size();
                                  double dHeight = abs(varFontInfo.dblVal * 96/72);
                                  pLogFont->lfHeight = long(dHeight);

    //加粗
                                 varFontInfo = fTextFont.get_Bold();
                                  if (varFontInfo.boolVal)
                                 {
                                       pLogFont->lfWeight = 700;
                                 }

    //斜体
                                varFontInfo = fTextFont.get_Italic();
                                if (varFontInfo.boolVal)
                                {
                                   pLogFont->lfItalic = TRUE;
                                 }

    //下划线 读出单下滑线与多下划线
                                varFontInfo = fTextFont.get_Underline();
                                long lUnderLine = varFontInfo.lVal;
                                if (-4119 == lUnderLine || 2 == lUnderLine)
                               {
                                   pLogFont->lfUnderline = TRUE;
                               }

//第一次写这样的博客,记录学习笔记,成为优秀的程序员,终有一天,我要站在巨人的肩上!

【VC++学习笔记一】MFC操作Excel的更多相关文章

  1. VC学习笔记---ATL MFC CLR三个库的区别

    MFC.ATL和CLR是VC2005内置的三大库,涵盖了Windows的各种开发方法和开发应用.当然关于C++开发的库不止这三个,不过这三个是微软推荐. 从编程所处层次而言,WIN32为最底层,其次是 ...

  2. 孙鑫VC学习笔记:多线程编程

    孙鑫VC学习笔记:多线程编程 SkySeraph Dec 11st 2010  HQU Email:zgzhaobo@gmail.com    QQ:452728574 Latest Modified ...

  3. VSTO学习笔记(二)Excel对象模型

    原文:VSTO学习笔记(二)Excel对象模型 上一次主要学习了VSTO的发展历史及其历代版本的新特性,概述了VSTO对开发人员的帮助和效率提升.从这次开始,将从VSTO 4.0开始,逐一探讨VSTO ...

  4. VC学习笔记:对话框

    VC学习笔记:对话框 SkySeraph NOV.11st 2009 HQU Email-zgzhaobo@gmail.com  QQ-452728574 Latest Modified Date:O ...

  5. IOS学习笔记25—HTTP操作之ASIHTTPRequest

    IOS学习笔记25—HTTP操作之ASIHTTPRequest 分类: iOS2012-08-12 10:04 7734人阅读 评论(3) 收藏 举报 iosios5网络wrapper框架新浪微博 A ...

  6. VC++ 学习笔记(序):神一样的语言

    总的来说,我觉得VC++是一门神一样的语言——它是公认最强大.最复杂的:它一切以效率为第一要务,却又不肯落伍,拼命兼容现在的新的语言设计特点.本来在别的语言很容与就避开的问题,在这里要用很高的技巧去设 ...

  7. java学习笔记07--日期操作类

    java学习笔记07--日期操作类   一.Date类 在java.util包中定义了Date类,Date类本身使用非常简单,直接输出其实例化对象即可. public class T { public ...

  8. jQuery学习笔记之DOM操作、事件绑定(2)

    jQuery学习笔记之DOM操作.事件绑定(2) --------------------学习目录------------------------ 4.DOM操作 5.事件绑定 源码地址: https ...

  9. tensorflow学习笔记——使用TensorFlow操作MNIST数据(2)

    tensorflow学习笔记——使用TensorFlow操作MNIST数据(1) 一:神经网络知识点整理 1.1,多层:使用多层权重,例如多层全连接方式 以下定义了三个隐藏层的全连接方式的神经网络样例 ...

  10. tensorflow学习笔记——使用TensorFlow操作MNIST数据(1)

    续集请点击我:tensorflow学习笔记——使用TensorFlow操作MNIST数据(2) 本节开始学习使用tensorflow教程,当然从最简单的MNIST开始.这怎么说呢,就好比编程入门有He ...

随机推荐

  1. MySQL 以及 Python 实现排名窗体函数

    大部分数据库都提供了窗体函数.比方RANK,ROW_NUMBER等等. MySQL 这方面没有直接提供.可是能够变相的实现.我曾经写了row_number 的实现,今天有时间把 rank 的实现贴出来 ...

  2. 在 Win8.1 上安装 Dedup

    install-package Microsoft-Windows-ServerCore-FullServer-Package~31bf3856ad364e35~amd64~~6.3.9600.163 ...

  3. ACM:动态规划,01背包问题

    题目: 有n件物品和一个容量为C的背包.(每种物品均仅仅有一件)第i件物品的体积是v[i],重量是w[i].选一些物品装到这个背包中,使得背包内物品在整体积不超过C的前提下重量尽量大. 解法:两种思路 ...

  4. Windows server 2008 布署FTP服务器实例(适用于阿里云)!

    Windows server 2008 布署FTP服务器实例(适用于阿里云). 1.打开管理.配置-用户-新建用户,如:ftp_user,并设置password.选择永只是期和password不能更改 ...

  5. legend---九、js的核心是什么

    legend---九.js的核心是什么 一.总结 一句话总结:js里面一切东西都是对象,包括数组,字符串,所以你就知道数组啊,对象啊,的很多东西怎么用了 1.js如何合并两个数组? concat,ar ...

  6. 前端到后台ThinkPHP开发整站--php开发案例

    前端到后台ThinkPHP开发整站--php开发案例 总结 还是需要做几个案例,一天一个为佳,那样才能做得快. 从需求分析着手,任务体系要构建好,这样才能非常高效. 转自: 前端到后台ThinkPHP ...

  7. Python 标准库 —— 队列(Queue,优先队列 PriorityQueue)

    优先队列,有别于普通队列的先入先出(虽然字面上还是队列,但其实无论从含义还是实现上,和普通队列都有很大的区别),也有别于栈的先入后出.在实现上,它一般通过堆这一数据结构,而堆其实是一种完全二叉树,它会 ...

  8. linux中的raid

    参考文档 http://www.cnblogs.com/ivictor/p/6099807.html 制作raid5 http://blog.51cto.com/11134648/2103384 RA ...

  9. centos7 阿里云yum源更换

    个人比较喜欢阿里云yum源,同时使用centos7 首先 cd /etc/yum.repos.d/ wget -O /etc/yum.repos.d/CentOS-Base.repo http://m ...

  10. hdu 1022 - 数据结构 栈

    题目链接 按序列a进栈,问能不能按序列b出栈. 遍历b,如果当前元素进过栈了,那么必须和栈顶元素相同.如果没进过栈则按a序列压栈,直到遇到当前元素. #include <iostream> ...