首先要在程序中加载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); 
}
然后在return FALSE;语句之前加入:
::CoUninitialize();//释放COM库

////////////////////////////////////////////////////////////////////////////////////////////////////////////

使用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.pRange.ReleaseDispatch();
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的一些操作的更多相关文章

  1. vbs中对excel的常用操作

    使用QTP自动化测试中,用到对excel的读写操作,这里把一些常用对excel操作的方法进行了归纳,总结.(对excel格式设置的常用操作这里没有进行总结.) Function DataToExcel ...

  2. 在没安装OFFICE的服务器SSIS中进行EXCEL的ETL操作!

    由于OFFICE 2010的安装包比较庞大,如果仅仅为了在服务器中实现操作EXCEL,完全没有必要安装整个OFFICE,是否可以不装OFFICE也实现与OFFICE文件的互相操作呢?答案是肯定的,在S ...

  3. MFC中使用ADO进行数据库操作

    参考FROM:http://hi.baidu.com/sunkanghome/item/e1fda510b3186359f1090ee2 数据库与数据库编程: 当前各种主流数据库有很多,包括Oracl ...

  4. MFC中的CString类使用方法指南

    MFC中的CString类使用方法指南 原文出处:codeproject:CString Management [禾路:这是一篇比较老的资料了,但是对于MFC的程序设计很有帮助.我们在MFC中使用字符 ...

  5. python中使用xlrd、xlwt操作excel表格详解

    python读excel——xlrd 这个过程有几个比较麻烦的问题,比如读取日期.读合并单元格内容.下面先看看基本的操作: 首先读一个excel文件,有两个sheet,测试用第二个sheet,shee ...

  6. 报表中的Excel操作之Aspose.Cells(Excel模板)

    原文:报表中的Excel操作之Aspose.Cells(Excel模板) 本篇中将简单记录下Aspose.Cells这个强大的Excel操作组件.这个组件的强大之处,就不多说,对于我们的报表总是会有导 ...

  7. C#中对Excel进行操作

    工作中要处理一批数据,主要是处理从别处导出来的Excel表格(大概有一千多行,三十多列),拿到表格对Excel表格进行分析,按照一定的规则进行拆分成为一万多行的数据:首先这个需求要用程序进行处理的背景 ...

  8. 【转】经典!python中使用xlrd、xlwt操作excel表格详解

    最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异,而且不太能满足需求,不过经过一番对源码的"研究&q ...

  9. python中的excel操作

    一. Excel在python中的应用 存测试数据 有的时候大批量的数据,我们需要存到数据库中,在测试的时候才能用到.测试的时候就从数据库中读取出来.这点是非常重要的! 存测试结果 二. Excel中 ...

随机推荐

  1. 剑指offer面试题48: 最长不含重复字符的子字符串

    Given a string, find the length of the longest substring without repeating characters.(请从子字符串中找出一个最长 ...

  2. C#基础随手笔记之基础操作优化

    对数据的查询,删除等基本操作是任何编程语言都会涉及到的基础,因此,研究了一下C#中比较常用的数据操作类型,并顺手做个笔记. List查询时,若是处理比较大的数据则使用HashSet<T>类 ...

  3. index() checkbox单选问题

    index() 只对兄弟节点有用 如果这种结构要选择checkbox 时用prop附加属性 removeAttr清楚属性 $('.checkbox').prop('checked',true) $(' ...

  4. Implement int sqrt(int x).

    自己设计函数,实现求根号.x是非负整数. Input: 8 Output: 2 当开出根号后有小数,则省略小数部分.. 思路:只要找到一个数a,a*a<=x而且(a+1)*(a+1)>x, ...

  5. oracle超出打开游标的最大数的原因和解决方案

    oracle超出打开游标的最大数的原因和解决方案 分类: Oracle相关2012-06-05 10:36 6362人阅读 评论(0) 收藏 举报 oracle数据库sqljavasessionsys ...

  6. 解决记录:win10 无法安装VS2017,visual studio installer下载进度始终为0

    问题描述:win10 下无法安装VS2017,visual studio installer下载进度始终为0,点击取消按钮后,也没有反应,visual studio installer也关闭不掉: 具 ...

  7. git如何移除某文件夹的版本控制

    目录结构如下 project bin lib src ...... 执行如下的操作 git add . git commit -m "add bin/ lib/ src/" git ...

  8. CSS的display:table

    好久都没有写博客了,似乎总是觉得少了些什么-- 刚好最近在工作中遇到了一个新的东西display:table,这个也是css的布局的一种,而且又是display的,之前已经写过了display的fle ...

  9. js实用技巧

    IIFE(立即调用函数表达式)最广泛的用途是避免污染全局作用域. 已经有很多JavaScript库和JavaScript高手正在使用这种技巧, 尤其是在最流行jQuery插件的开发者中. 你也应该把这 ...

  10. 自定义完美的ViewPager 真正无限循环的轮播图

    网上80%的思路关于Android轮播图无限循环都是不正确的,不是真正意义上的无限循环, 其思路大多是将ViewPager的getCount方法返回值设置为Integer.MAX_VALUE, 然后呢 ...