【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 ...
随机推荐
- Vim 批量替换
假设在非Win系统下. 想批量替换文本不再是Ctrl+F那么简单了, 一般用Vim来做批量替换, 略微复杂点: 比如将192.168.0.1替换为192.168.0.2 :%s/192.168.0.1 ...
- linux线程间同步(1)读写锁
读写锁比mutex有更高的适用性,能够多个线程同一时候占用读模式的读写锁.可是仅仅能一个线程占用写模式的读写锁. 1. 当读写锁是写加锁状态时,在这个锁被解锁之前,全部试图对这个锁加锁的线程都会被堵塞 ...
- nj07---npm
一.如何使用包管理器 Node.js包管理器,即npm是Node.js官方提供的包管理工具,它已经成了Node.js包的标准发布平台,用于Node.js包的发布.传播.依赖控制.(可以下载上面的包也可 ...
- bzoj1801: [Ahoi2009]chess 中国象棋(DP)
1801: [Ahoi2009]chess 中国象棋 题目:传送门 题解: 表示自己的DP菜的抠脚 %题解... 定义f[i][j][k]表示前i行 仅有一个棋子的有j列 有两个棋子的有k个 的方案数 ...
- UVa 10305 Ordering Tasks【拓扑排序】
题意:给出n件事情,m个二元组关系,求它们的拓扑序列 用的队列来做 #include<iostream> #include<cstdio> #include<cstrin ...
- ACM-ICPC 2017 Asia Urumqi(第八场)
A. Coins Alice and Bob are playing a simple game. They line up a row of nnn identical coins, all wit ...
- NSURLSession的作用
NSURLSession的作用: 1.全局配置: 2.任务生成与管理: 3.数据链接管理: po self.urlSession.delegateQueue.operations <__NSAr ...
- NodeJS学习笔记 (24)本地路径处理-path(ok)
模块概览 在nodejs中,path是个使用频率很高,但却让人又爱又恨的模块.部分因为文档说的不够清晰,部分因为接口的平台差异性. 将path的接口按照用途归类,仔细琢磨琢磨,也就没那么费解了. 获取 ...
- js获取css
原帖地址:http://kingphp.blog.163.com/blog/static/20042324420120109438458/ 我们通过dom.style获得的属性是有限制的,只能获取ht ...
- UITextField监控文字变化方法
项目里须要在不隐藏键盘的情况下.来更改button 的状态. 这里就是要对uitextfield监控.uitextfield继承于UIControl.所以能够 使用addTarget方法.详细例如以下 ...