使用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使用文章 ...
随机推荐
- javascript基础学习(十五)
javascript之cookie 学习要点: cookie介绍 创建与获取cookie cookie的编码 cookie的生存期 cookie的路径 cookie的domain cookie的sec ...
- java_reflect_02
按我们所知道的.对于类中的method,constructor,field如果访问属性是private的情况下我们是访问不了的,但通过反射就可以做到 仔细分析api发现Method,Construct ...
- Python django admin 替换表单控件
测试版本: Python 2.7 Django 1.6.2 models.py from django.db import models class Article(models.Model): ti ...
- css 雪碧图 及jquery定位代码
无意间发现了一个很神奇的事情,就是 鼠标悬停在图片上方会切换,起初以为图标是单独插入的.但发现居然是一张完整的图片. 一万只草泥马在心中奔腾.这是怎么实现的? 后来询问得知,这是css精灵技术(spr ...
- 2.2.5 NIO.2 Path 和 Java 已有的 File 类
NIO与IO交互 toPath() File -- Path toFile() Path -- File Demo: import java.io.File; import java.nio.file ...
- eclipse中如何导入jar包
如图,首先右键点击项目,选择最下面的properties, 然后进去之后点击java build path,右边会出来4个选项卡,选择libraries, 这时候最右边会有多个选项,第一个add ja ...
- 【行为型】Observer模式
观察者模式意图解决一对多的依赖关系情形中,当被依赖对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新的问题.举个很简单的例子说,假如一个游戏中的角色的某个属性状态发生了变化,此处不妨假设为 ...
- split和join和pop和remove用法
简单字符串分割不需要import re,多字符串分割要导入re,多个字符串分割的分隔符要用 | 分开 >>> msg='chen hang wuhan keji daxue aljl ...
- cypress的EZ-USB对于USB的介绍
Host is MasterThis is a fundamental USB concept. There is exactly onemaster in a USB system: the hos ...
- C语言itoa函数和atoi 函数
C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串.以下是用itoa()函数将整数转 换为字符串的一个例子: # include <stdio.h> ...