【VC++学习笔记一】MFC操作Excel
最近在做一个读取Excel的功能,之前也做过相关的,但总是零零闪闪的,趁着正在劲头上,归纳一下:
利用Automation添加相关的类,在Excel2010中可以在安装文件夹下直接点击Excel.exe 会生成很多类,建议只导入需要用到的类,不然会很卡。
用到的类和变量说明:CApplication m_ExlApp;//应用程序类,对应每一个Excel应用程序
CWorkbook wbk;//工作簿
                                  CWorkbooks wbks;//对应每个Exel文档
CWorksheets whts ,m_Wheet;//对应每个文档的每一个sheet表
                                  CRange range;//单元格范围,运用最广泛,获取单元格范围
                                  ColeVarinat var;//读取每个零时变量
- 加载程序:if(!m_ExlApp.CreateDispatch("Excel.Application"))
 {
 AfxMessageBox("无法启动Excel服务器!");
 return;
 }
- 连接工作簿、工作表等      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());
- 获得行高、列宽   Var = RangRow.get_RowHeight();
 CString strHeight;
 strHeight.Format(CString((LPCSTR)(_bstr_t)(_variant_t)Var));
 float fHeight = _tstof(strHeight)*9600/7200; //转换为像素 列宽同理
- 获取单元格批注   CComment com;//批注类 
 com = range.get_Comment();
 CString strCom = _T("");
 strCom = com.Text(vtMissing,vtMissing,vtMissing);
- 获取单元格是否含有边框线  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)
 {//说明含有边界值,具体的可以自己查看
 }
 }//从左到右依次判断,并给报表的对应单元格赋值
- 获取单元格所含公式       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();
- 获取字体信息               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的更多相关文章
- VC学习笔记---ATL MFC CLR三个库的区别
		MFC.ATL和CLR是VC2005内置的三大库,涵盖了Windows的各种开发方法和开发应用.当然关于C++开发的库不止这三个,不过这三个是微软推荐. 从编程所处层次而言,WIN32为最底层,其次是 ... 
- 孙鑫VC学习笔记:多线程编程
		孙鑫VC学习笔记:多线程编程 SkySeraph Dec 11st 2010 HQU Email:zgzhaobo@gmail.com QQ:452728574 Latest Modified ... 
- VSTO学习笔记(二)Excel对象模型
		原文:VSTO学习笔记(二)Excel对象模型 上一次主要学习了VSTO的发展历史及其历代版本的新特性,概述了VSTO对开发人员的帮助和效率提升.从这次开始,将从VSTO 4.0开始,逐一探讨VSTO ... 
- VC学习笔记:对话框
		VC学习笔记:对话框 SkySeraph NOV.11st 2009 HQU Email-zgzhaobo@gmail.com QQ-452728574 Latest Modified Date:O ... 
- IOS学习笔记25—HTTP操作之ASIHTTPRequest
		IOS学习笔记25—HTTP操作之ASIHTTPRequest 分类: iOS2012-08-12 10:04 7734人阅读 评论(3) 收藏 举报 iosios5网络wrapper框架新浪微博 A ... 
- VC++ 学习笔记(序):神一样的语言
		总的来说,我觉得VC++是一门神一样的语言——它是公认最强大.最复杂的:它一切以效率为第一要务,却又不肯落伍,拼命兼容现在的新的语言设计特点.本来在别的语言很容与就避开的问题,在这里要用很高的技巧去设 ... 
- java学习笔记07--日期操作类
		java学习笔记07--日期操作类 一.Date类 在java.util包中定义了Date类,Date类本身使用非常简单,直接输出其实例化对象即可. public class T { public ... 
- jQuery学习笔记之DOM操作、事件绑定(2)
		jQuery学习笔记之DOM操作.事件绑定(2) --------------------学习目录------------------------ 4.DOM操作 5.事件绑定 源码地址: https ... 
- tensorflow学习笔记——使用TensorFlow操作MNIST数据(2)
		tensorflow学习笔记——使用TensorFlow操作MNIST数据(1) 一:神经网络知识点整理 1.1,多层:使用多层权重,例如多层全连接方式 以下定义了三个隐藏层的全连接方式的神经网络样例 ... 
- tensorflow学习笔记——使用TensorFlow操作MNIST数据(1)
		续集请点击我:tensorflow学习笔记——使用TensorFlow操作MNIST数据(2) 本节开始学习使用tensorflow教程,当然从最简单的MNIST开始.这怎么说呢,就好比编程入门有He ... 
随机推荐
- MongoDB count distinct group by JavaAPI查询
			import java.net.UnknownHostException; import com.mongodb.BasicDBList; import com.mongodb.BasicDBObje ... 
- ACM数学知识体系
			在盛情收到学弟邀请给他们整理ACM数学方面的知识体系,作为学长非常认真的弄了好久,希望各学弟不辜负学长厚爱!!!非常抱歉因为电脑全盘格式化好多word.PPT都丢失,我尽量具体地给大家找到各知识点学习 ... 
- [Android Studio 权威教程]配置出“NB”的Android Studio
			前几篇博客我们已经安装好了As,并且创建了我们的第一个HelloWrod ,这片blog我们继续配置出一个NB的Android Studio 假设你是一个才開始接触到AS或者想从Eclipse转型到A ... 
- Struts2国际化-getText()方法
			转自https://blog.csdn.net/qq_43560838/article/details/83747604 一:简单理解 国际化简称i18n,其来源是英文单词 international ... 
- [NOIP2015模拟10.22] 最大子矩阵 解题报告(单调栈)
			Description 我们将矩阵A中位于第i行第j列的元素记作A[i,j].一个矩阵A是酷的仅当它满足下面的条件: A[1,1]+A[r,s]<=A[1,s]+A[r,1](r,s ... 
- Kali linux 2016.2(Rolling)里Metasploit的OpenVAS
			不多说,直接上干货! 关于OpenAVS的概念,我这里不多赘述. 前提得,大家要先安装好OpenVAS!!! 我们都知道,BT5中已经预先安装好了OpenVAS网络漏洞扫描工具,我们只需进行一些配置即 ... 
- jquery判断页面元素是否存在
			在传统的Javascript里,当我们对某个页面元素进行某种操作前,最好先判断这个元素是否存在.原因是对一个不存在的元素进行操作是不允许的. 例如: document.getElementById(& ... 
- 继承—Music
			public class Instrument { public void play(){ System.out.println("弹奏乐器"); } public class W ... 
- ViewPager设置不能滚动
			设置ViewPager不能滑动 1:设置当前选中的页面 public void setCurrentItem(int item) { mPopulatePending = false; setCurr ... 
- flex属性的取值
			首先明确一点是, flex 是 flex-grow.flex-shrink.flex-basis的缩写.故其取值可以考虑以下情况:flex 的默认值是以上三个属性值的组合.假设以上三个属性同样取默认值 ... 
