使用MFC读写Excel
_Application m_ExlApp;
//组件服务器的各个classes
_Workbook m_ExlBook;
Workbooks m_ExlBooks;
_Worksheet m_ExlSheet;
Worksheets m_ExlSheets;
// LPDISPATCH lpDisp;
Range m_ExlRge, usedRange;
if
(!m_ExlApp.CreateDispatch(
"Excel.Application"
,NULL))
{
AfxMessageBox(
"创建Excel服务失败!"
);
return
;
}
//设置为可见
m_ExlApp.SetVisible(TRUE);
///////////////////下面得到应用程序所在的路径///////////////////
CString theAppPath,theAppName;
char
Path[MAX_PATH];
GetModuleFileName(NULL,Path,MAX_PATH);
//得到应用程序的全路径
theAppPath=(CString)Path;
theAppName=AfxGetApp()->m_pszAppName;
theAppName+=
".exe"
;
//把最后的文件名去掉
int
length1,length2;
length1=theAppPath.GetLength();
length2=theAppName.GetLength();
theAppPath.Delete(length1-length2,length2);
////////////////////////////////////////////////////////////////
COleVariant covOptional((
long
)DISP_E_PARAMNOTFOUND, VT_ERROR);
// Get the Workbooks collection so that you can add a new workbook
m_ExlBooks.AttachDispatch(m_ExlApp.GetWorkbooks());
// 得到Workbooks
m_ExlBook = m_ExlBooks.Add(covOptional);
// 得到Workbook
// m_ExlBooks.AttachDispatch(m_ExlApp.GetWorkbooks(),TRUE);
// m_ExlBook.AttachDispatch(m_ExlBooks.Add((_variant_t)TempPath),TRUE);//加载EXCEL模板
m_ExlSheets.AttachDispatch(m_ExlBook.GetSheets(),TRUE);
//加载Sheet页面
//添加新的Sheet页面
m_ExlSheets.Add(vtMissing,vtMissing,_variant_t((
long
)1),vtMissing);
//删除第二个Sheet页面
m_ExlSheet.AttachDispatch(m_ExlSheets.GetItem(_variant_t((
long
)2)),TRUE);
m_ExlSheet.Delete();
//把第一个Sheet页面的名字改变为TestSheet
m_ExlSheet.AttachDispatch(m_ExlSheets.GetItem(_variant_t((
long
)1)),TRUE);
m_ExlSheet.SetName(
"TestSheet"
);
///////合并第一行单元格A1至D1//////
//加载要合并的单元格
m_ExlRge.AttachDispatch(m_ExlSheet.GetRange(_variant_t(
"A1"
),_variant_t(
"D1"
)),TRUE);
m_ExlRge.Merge(_variant_t((
long
)0));
////////设置表格内容////////
m_ExlRge.AttachDispatch(m_ExlSheet.GetCells(),TRUE);
//加载所有单元格
m_ExlRge.SetItem(_variant_t((
long
)1),_variant_t((
long
)1),_variant_t(
"数学系研究生课程统计"
));
m_ExlRge.SetItem(_variant_t((
long
)2),_variant_t((
long
)1),_variant_t(
"课程名"
));
m_ExlRge.SetItem(_variant_t((
long
)2),_variant_t((
long
)2),_variant_t(
"课时"
));
m_ExlRge.SetItem(_variant_t((
long
)2),_variant_t((
long
)3),_variant_t(
"难度"
));
m_ExlRge.SetItem(_variant_t((
long
)2),_variant_t((
long
)4),_variant_t(
"教学方式"
));
m_ExlRge.SetItem(_variant_t((
long
)3),_variant_t((
long
)1),_variant_t(
"泛函分析"
));
m_ExlRge.SetItem(_variant_t((
long
)3),_variant_t((
long
)2),_variant_t(
"60"
));
m_ExlRge.SetItem(_variant_t((
long
)3),_variant_t((
long
)3),_variant_t(
"普通"
));
m_ExlRge.SetItem(_variant_t((
long
)3),_variant_t((
long
)4),_variant_t(
"老师讲课"
));
m_ExlRge.SetItem(_variant_t((
long
)4),_variant_t((
long
)1),_variant_t(
"微分流形"
));
m_ExlRge.SetItem(_variant_t((
long
)4),_variant_t((
long
)2),_variant_t(
"40"
));
m_ExlRge.SetItem(_variant_t((
long
)4),_variant_t((
long
)3),_variant_t(
"变态难"
));
m_ExlRge.SetItem(_variant_t((
long
)4),_variant_t((
long
)4),_variant_t(
"自学"
));
m_ExlRge.SetItem(_variant_t((
long
)5),_variant_t((
long
)1),_variant_t(
"二阶椭圆型方程与方程组"
));
m_ExlRge.SetItem(_variant_t((
long
)5),_variant_t((
long
)2),_variant_t(
"60"
));
m_ExlRge.SetItem(_variant_t((
long
)5),_variant_t((
long
)3),_variant_t(
"很难"
));
m_ExlRge.SetItem(_variant_t((
long
)5),_variant_t((
long
)4),_variant_t(
"讨论"
));
m_ExlRge.AttachDispatch(m_ExlSheet.GetUsedRange());
//加载已使用的单元格
m_ExlRge.SetWrapText(_variant_t((
long
)1));
//设置单元格内的文本为自动换行
//设置齐方式为水平垂直居中
//水平对齐:默认=1,居中=-4108,左=-4131,右=-4152
//垂直对齐:默认=2,居中=-4108,左=-4160,右=-4107
m_ExlRge.SetHorizontalAlignment(_variant_t((
long
)-4108));
m_ExlRge.SetVerticalAlignment(_variant_t((
long
)-4108));
///////设置整体的字体、字号及颜色//////
Font ft;
ft.AttachDispatch(m_ExlRge.GetFont());
ft.SetName(_variant_t(
"宋体"
));
//字体
ft.SetColorIndex(_variant_t((
long
)11));
//字的颜色
ft.SetSize(_variant_t((
long
)12));
//字号
///////////设置标题字体及颜色//////////
m_ExlRge.AttachDispatch(m_ExlSheet.GetRange(_variant_t(
"A1"
),_variant_t(
"D1"
)));
ft.AttachDispatch(m_ExlRge.GetFont());
ft.SetBold(_variant_t((
long
)1));
//粗体
ft.SetSize(_variant_t((
long
)13));
ft.SetColorIndex(_variant_t((
long
)2));
CellFormat cf;
cf.AttachDispatch(m_ExlRge.GetCells());
//////////////设置底色/////////////////
Interior it;
it.AttachDispatch(m_ExlRge.GetInterior());
it.SetColorIndex(_variant_t((
long
)11));
//标题底色
////表格内容的底色////
m_ExlRge.AttachDispatch(m_ExlSheet.GetRange(_variant_t(
"A2"
),_variant_t(
"D5"
)));
it.AttachDispatch(m_ExlRge.GetInterior());
it.SetColorIndex(_variant_t((
long
)15));
//////////////为表格设置边框/////////////
Range UnitRge;
CString CellName;
for
(
int
i=1;i<=4;i++)
{
for
(
int
j=1;j<=4;j++)
{
CellName.Format(
"%c%d"
,j+64,i);
//单元格的名称
UnitRge.AttachDispatch(m_ExlRge.GetRange(_variant_t(CellName),_variant_t(CellName)));
//加载单元格
//LineStyle=线型 Weight=线宽 ColorIndex=线的颜色(-4105为自动)
UnitRge.BorderAround(_variant_t((
long
)1),_variant_t((
long
)2),_variant_t((
long
)-4105),vtMissing);
//设置边框
}
}
//释放对象(相当重要!)
m_ExlRge.ReleaseDispatch();
m_ExlSheet.ReleaseDispatch();
m_ExlSheets.ReleaseDispatch();
m_ExlBook.ReleaseDispatch();
m_ExlBooks.ReleaseDispatch();
//m_ExlApp一定要释放,否则程序结束后还会有一个Excel进程驻留在内存中,而且程序重复运行的时候会出错
m_ExlApp.ReleaseDispatch();
//退出程序 m_ExlApp.Quit();
使用MFC读写Excel的更多相关文章
- MFC vs2012 Office2013 读写excel文件
近期在忙一个小项目(和同学一起搞的),在这里客户要求不但读写txt,而且可以读写excel文件,这里本以为很简单,结果...废话少说,过程如下: 笔者环境:win7 64+VS2012+Office2 ...
- C# 使用 NPOI 库读写 Excel 文件(转载)
NPOI 是开源的 POI 项目的.NET版,可以用来读写Excel,Word,PPT文件.在处理Excel文件上,NPOI 可以同时兼 容xls 和 xlsx.官网提供了一份Examples,给出了 ...
- Python3.4如何读写Excel
在python3.x(散仙使用的版本是python3.4)里,我们应该如何操作excel. 首先在python3.4里,我们可以使用新的python类库,来支持3.x之后的读写excel 针对 03版 ...
- 用Python读写Excel文件(转)
原文:google.com/ncr 虽然天天跟数据打交道,也频繁地使用Excel进行一些简单的数据处理和展示,但长期以来总是小心地避免用Python直接读写Excel文件.通常我都是把数据保存为以TA ...
- 使用NPOI读写Excel、Word
NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. 使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 ...
- 【原创】.NET读写Excel工具Spire.Xls使用(1)入门介绍
在.NET平台,操作Excel文件是一个非常常用的需求,目前比较常规的方法有以下几种: 1.Office Com组件的方式:这个方式非常累人,微软的东西总是这么的复杂,使用起来可能非常不便,需要安装E ...
- 【原创】.NET读写Excel工具Spire.Xls使用(2)Excel文件的控制
本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html .NET读写Excel工具Spire.Xls使用文章 ...
- 【原创】.NET读写Excel工具Spire.Xls使用(3)单元格控制
本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html .NET读写Excel工具Spire.Xls使用文章 ...
- 【原创】.NET读写Excel工具Spire.Xls使用(4)对数据操作与控制
本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html .NET读写Excel工具Spire.Xls使用文章 ...
随机推荐
- 【转】C++之内部类(嵌套类)与外部类及友元
[转]http://baike.baidu.com/link?url=Md223wQoT5s-3cZ5xRnj1pGmvm310DKAuh-HDrcEdc2l24rwobHrdEc_Mi4Z3BGP0 ...
- [逼死强迫症 - C&C++设计风格选择.1] : 命名规范
1.命名规范 本系列的第一篇,命名风格本就是有关艺术审美,没有美与丑的绝对标准,本文难免带有主观选择倾向,但是会尽量保持客观的态度归纳几种主流的命名风格,仅供参考.制定规范是为了方便团队沟通和利于代码 ...
- hdu1301 Jungle Roads (Prim)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1301 依旧Prim............不多说了 #include<iostream> ...
- 跟我学android- 创建运行环境(二)
Android程序 需要在Android手机上运行,因此 Android开发时 必须准备相关运行,调试环境. Android真机(建议使用真机,速度快,效果好) Android虚拟设备(AVD) 使用 ...
- Ubuntu12.04安装java以及Eclipse和Tomcat
阔别已久的Java,现在捡起来偶感觉亚历山大啊,就单单一个环境的安装就搞得我焦头烂额啊.真后悔当初学习Java的时候没有记录下来这一门槛——环境的搭建,要知道学好一门语言,Develop Enviro ...
- Java中的继承与组合
本文主要说明Java中继承与组合的概念,以及它们之间的联系与区别.首先文章会给出一小段代码示例,用于展示到底什么是继承.然后演示如何通过“组合”来改进这种继承的设计机制.最后总结这两者的应用场景,即到 ...
- MongoDB-GRIDFS大文件系统
gridfs 是一种在mongodb中存储大二进制文件的机制,使用gridfs的原因: 1.存储巨大的文件(视频图片). 2.利用GRIDFS可以简化需求. 3.GRIDFS 利用已经建立起来的复制以 ...
- golang protobuf
1. proto文件编写的时候,如果用uint32或uint64类型,那么不能用required,必须用optional. 如果用错了,会出现错误:unmarshaling error: proto: ...
- 324篇CSS应用效果集合(梦想天空,可同时应用于Web开发与Qt界面开发)
http://www.cnblogs.com/lhb25/category/146075.html http://www.yyyweb.com/
- 【HDOJ】5155 Harry And Magic Box
DP.dp[i][j]可以表示i行j列满足要求的组合个数,考虑dp[i-1][k]满足条件,那么第i行的那k列可以为任意排列(2^k),其余的j-k列必须全为1,因此dp[i][j] += dp[i- ...