在MFC中对Excel的一些操作
首先要在程序中加载CExcel.h和CExcel.cpp文件,这里面包装了很多函数和对Excel文件的操作,下面所有程序中的m_excel都是类CExcel的对象,如:
private:
_Application pApp;
Workbooks pBooks ;
_Workbook pBook ;
Worksheets pSheets ;
_Worksheet pSheet;
Range pRange;
Interior pInterior;
FontPtr pFont;
////////////////////////////////////////////////////////////////////////////////////////////////////////////
首先在BOOL CVCExcelApp::InitInstance()之中,int nResponse = dlg.DoModal()语句之后加入如下代码:
if
(CoInitialize(NULL)==0)
//初始化COM库
{
AfxMessageBox(
"初始化COM失败!"
);
exit
(1);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////
使用Excel模板来新建一个excel文件,并保存在指定的地址上
UpdateData();//外部有对话框,此时可以将对话框中数据拷贝给与对话框绑定的变量
CString modPath = _T("C:\\Users\\军\\Desktop\\excel.xls");//模板所在的地址
CString strName = m_fileName + _T(".xlsx");//新建的Excel文件的文件名
CString pathName = m_saveAddr + strName;//新建的Excel文件的保存地址
//启动Excel服务
CoInitialize(NULL);
if (!m_execl.pApp.CreateDispatch(_T("Excel.Application"), NULL))
{
AfxMessageBox(_T("创建Excel服务失败!"));
return;
}
m_execl.pApp.put_Visible(FALSE);//设置Excel文件不打开
m_execl.pBooks.AttachDispatch(m_execl.pApp.get_Workbooks(), TRUE);
m_execl.pBook.AttachDispatch(m_execl.pBooks.Add((_variant_t)modPath), TRUE);
//加载模板Excel文件
m_execl.pSheets.AttachDispatch(m_execl.pBook.get_Worksheets(), true);//加载sheet页面
m_execl.pSheet.AttachDispatch(m_execl.pSheets.get_Item(_variant_t("Sheet1")), true);
//将新建的Excel文件保存到指定的地址中,此时保存在pathName地址中
m_execl.pSheet.SaveAs(pathName, vtMissing, vtMissing, vtMissing, vtMissing,
vtMissing, vtMissing, vtMissing, vtMissing, vtMissing);
//释放Excel实例
//释放对象
m_execl.pRange.ReleaseDispatch();
m_execl.pSheet.ReleaseDispatch();
m_execl.pSheets.ReleaseDispatch();
m_execl.pBook.ReleaseDispatch();
m_execl.pBooks.ReleaseDispatch();
//退出程序
m_execl.pApp.Quit();
//pApp一定要释放,否侧程序结束后还会有一个Excel进程驻留在内存中,而且程序重复运行的时候回出错
m_execl.pApp.ReleaseDispatch();
注:本程序里面的Excel文件后缀名为.xlsx,这个要依据情况定,有时可能是.xls
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
下面介绍怎么向指定路径下的Excel文件中写入数据
CoInitialize(NULL);
if (!m_execl.pApp.CreateDispatch(_T("Excel.Application")))
{
MessageBox(_T("创建Excell服务失败!"));
exit(1);
}
m_execl.pApp.put_Visible(FALSE);
m_execl.pBooks.AttachDispatch(m_execl.pApp.get_Workbooks(), true);
//打开要写数据的Excel文件,其中excelPath为该Excel文件的保存路径
m_execl.pBook.AttachDispatch(m_execl.pBooks.Open(excelPath, vtMissing, vtMissing,vtMissing,
vtMissing, vtMissing, vtMissing, vtMissing, vtMissing, vtMissing, vtMissing,
vtMissing, vtMissing, vtMissing,vtMissing));
m_execl.pSheets.AttachDispatch(m_execl.pBook.get_Worksheets(), true);
m_execl.pSheet.AttachDispatch(m_execl.pSheets.get_Item(_variant_t("sheet1")), true);
m_execl.pRange.AttachDispatch(m_execl.pSheet.get_Cells(), true);
//获得Excel文件中已经使用了的行数和列数
//得到该Excel文档中已经使用了的列数
m_execl.pRange = m_execl.pSheet.get_UsedRange();
m_execl.pRange = m_execl.pRange.get_Columns();
long icul = m_execl.pRange.get_Count();
//得到Excel文档中已经使用了的行数
m_execl.pRange = m_execl.pSheet.get_UsedRange();
m_execl.pRange = m_execl.pRange.get_Rows();
long iRow = m_execl.pRange.get_Count();
long iRows = iRow + 1;//这里当我们要写数据时,都是从已经使用了的下一行开始写数据,所以要将已经使用的行数+1来得到下一行
for (int c = 1; c <= icul; )//这里我是使用了CExcel类中自带的写数据的函数
{
m_execl.PutValue(c, iRows, strNum);//c表示要写数据的列,iRow表示要写数据的行,strNum表示写入的字符串,这里是CString型
c++
}
/////////////////////////下面是较一般的写数据的方便
m_pRang.SetItem(_variant_t((
long
)1),_variant_t((
long
)1),_variant_t(
"数学系研究生课程统计"
)); //往第一行第一列的单元格中写数据
m_pRang.SetItem(_variant_t((
long
)2),_variant_t((
long
)1),_variant_t(
"课程名"
)); //往第二行第一列的单元格中写数据
//加载已经使用的单元格
m_execl.pRange.AttachDispatch(m_execl.pSheet.get_UsedRange());
//水平对齐:默认=1,居中=-4108,左=-4131,右=-4152
//垂直对齐:默认=2,居中=-4108,左=-4160,右=-4107
m_execl.pRange.put_HorizontalAlignment(_variant_t((long)-4108));
m_execl.pRange.put_VerticalAlignment(_variant_t((long)-4108));
m_execl.pSheet.ReleaseDispatch();
m_execl.pSheets.ReleaseDispatch();
m_execl.pBook.ReleaseDispatch();
m_execl.pBooks.ReleaseDispatch();
//退出程序
m_execl.pApp.Quit();
m_execl.pApp.ReleaseDispatch();
在MFC中对Excel的一些操作的更多相关文章
- vbs中对excel的常用操作
使用QTP自动化测试中,用到对excel的读写操作,这里把一些常用对excel操作的方法进行了归纳,总结.(对excel格式设置的常用操作这里没有进行总结.) Function DataToExcel ...
- 在没安装OFFICE的服务器SSIS中进行EXCEL的ETL操作!
由于OFFICE 2010的安装包比较庞大,如果仅仅为了在服务器中实现操作EXCEL,完全没有必要安装整个OFFICE,是否可以不装OFFICE也实现与OFFICE文件的互相操作呢?答案是肯定的,在S ...
- MFC中使用ADO进行数据库操作
参考FROM:http://hi.baidu.com/sunkanghome/item/e1fda510b3186359f1090ee2 数据库与数据库编程: 当前各种主流数据库有很多,包括Oracl ...
- MFC中的CString类使用方法指南
MFC中的CString类使用方法指南 原文出处:codeproject:CString Management [禾路:这是一篇比较老的资料了,但是对于MFC的程序设计很有帮助.我们在MFC中使用字符 ...
- python中使用xlrd、xlwt操作excel表格详解
python读excel——xlrd 这个过程有几个比较麻烦的问题,比如读取日期.读合并单元格内容.下面先看看基本的操作: 首先读一个excel文件,有两个sheet,测试用第二个sheet,shee ...
- 报表中的Excel操作之Aspose.Cells(Excel模板)
原文:报表中的Excel操作之Aspose.Cells(Excel模板) 本篇中将简单记录下Aspose.Cells这个强大的Excel操作组件.这个组件的强大之处,就不多说,对于我们的报表总是会有导 ...
- C#中对Excel进行操作
工作中要处理一批数据,主要是处理从别处导出来的Excel表格(大概有一千多行,三十多列),拿到表格对Excel表格进行分析,按照一定的规则进行拆分成为一万多行的数据:首先这个需求要用程序进行处理的背景 ...
- 【转】经典!python中使用xlrd、xlwt操作excel表格详解
最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异,而且不太能满足需求,不过经过一番对源码的"研究&q ...
- python中的excel操作
一. Excel在python中的应用 存测试数据 有的时候大批量的数据,我们需要存到数据库中,在测试的时候才能用到.测试的时候就从数据库中读取出来.这点是非常重要的! 存测试结果 二. Excel中 ...
随机推荐
- java多继承
众所周知,java面向对象语言中只有单继承的编程语言,也许你会说,通过实现多个接口这种变通的方式达到多继承的目的.没错,你说的对,不过这并不是本片文章要说到的内容,本文要讲到的内容是java中实实在在 ...
- oracle的for和i++
很长时间没用oracle的储存了,这次用到一次i++i++的sql语句:declarei_1 number(30) :=0;begin i_1 :=i_1+1;//i_1=1 insert into ...
- 通向从容之道——Getting things done读书笔记
一.主要的两个目的: 1. 抓住所有一切需要处理的事情: 2. 训练自己在接受一切"输入信息"的前期作出决定. 二.目前的问题: ...
- git merge 与 git rebase
git merge git rebase merge V.S. rebase 参考材料 写在开始: 对merge和rebase的用法总有疑惑,好像两个都能完成"获取别的branch的comm ...
- Angular TypeScript开发环境集成jQuery扩展插件
集成步骤: 1.安装jquery极其扩展插件库ts定义文件 npm install jquery --save npm install --save-dev @types/jquery npm ins ...
- 在Django中使用Neo4j
重要的先说在前面吧,最后的选型结构是安装了最新的neo4j版本3.0.3,使用了neo4j-rest-client客户端库.主要原因是更适用于django的neomodel库目前只支持neo4j2.2 ...
- Android之淘宝商品列表长按遮罩效果
先来看看淘宝.唯品会长按商品的效果,以及简单Demo的效果: 首先分析一下场景: 长按条目时,弹出遮罩的效果遮挡在原来的条目布局上: 页面滑动或点击其他的条目,上一个正在遮罩的条目遮罩消 ...
- Spring JTA multiple resource transactions in Tomcat with Atomikos example
http://www.byteslounge.com/tutorials/spring-jta-multiple-resource-transactions-in-tomcat-with-atomik ...
- python笔记:#011#循环
循环 目标 程序的三大流程 while 循环基本使用 break 和 continue while 循环嵌套 01. 程序的三大流程 在程序开发中,一共有三种流程方式: 顺序 -- 从上向下,顺序执行 ...
- Beta 冲刺day 6
1.昨天的困难,今天解决的进度,以及明天要做的事情 昨天的困难:在导入导出方面遇到了困难,导出的文件不能直接导入. 今天解决的进度:完成了登录页面的背景设计,并再次测试了整个系统的功能. 明天要做的事 ...