一、添加与 Excel 操作相关的头文件

  项目 -> 类向导,在右上方有一个下拉栏,选择其中的 类型库中的MFC类(T),即可看到下图所示界面,选择“文件”选项,然后在下方的位置选项中添加本地文件,本人电脑中的EXCEL是安装在 C 盘的,故文件目录为:C:\Program Files\Microsoft Office\Office14\EXCEL.EXE。

  添加了 EXCEL.EXE 后,可以看到一系列接口,选择其中的: _Application、_Workbook、_Worksheet、Workbooks、Worksheets、Font、Range 并添加,然后在主程序中添加其头文件:

#include "CApplication.h"
#include "CWorkbook.h"
#include "CWorkbooks.h"
#include "CWorksheet.h"
#include "CWorksheets.h"
#include "CRange.h"
#include "CFont0.h"

  逐次打开上述头文件,并将其中的 “ #import "C:\\Program Files\\Microsoft Office\\Office14\\EXCEL.EXE" no_namespace ” 这句话给屏蔽掉,不然会报错,无法编译成功。这样之后,编译还是不能通过,会出现以下报错:

  点击 warning 来到报错处,在 DialogBox() 前面加上下划线 "_",即 "_DialogBox()" 即可。

二、创建并保存一个 Excel

  直接上代码先:

void CExcel_ExampleDlg::SaveDataToExcel()
{
CString cellNum; CApplication m_ExcelApp; // Excel 应用程序接口
CWorkbook m_ExcelBook;  // 工作簿
CWorkbooks m_ExcelBooks;  // 工作簿集合
CWorksheet m_ExcelSheet; // 工作表
CWorksheets m_ExcelSheets;  // 工作表集合
CRange m_ExcelRange; // 用于对单元格进行操作
CRange m_ExcelCols;
CFont0 m_ExcelFont; // 用于字体操作 // 获取系统时间并保存为 CString 类型
CString timeStr; // 获取系统时间
SYSTEMTIME sysTime;
GetLocalTime(&sysTime); CString m_saveFilePath; // 保存路径
timeStr.Format(L"_%4d.%2d.%2d_%2d.%2d",sysTime.wYear , sysTime.wMonth , sysTime.wDay , sysTime.wHour , sysTime.wMinute);
m_saveFilePath = _T("E:\\Workplace\\ExcelExample") + timeStr + _T(".xlsx");
  
CString str;
for(int i = ;i <;i++)
{
str.Format(L"%d",i);
ValueArray1.Add(str); str.Format(L"%d", * i);
ValueArray2.Add(str); str.Format(L"%d", * i);
SumArray.Add(str); } COleVariant covTrue((short)TRUE);
COleVariant covFalse((short)FALSE);
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR); if(!m_ExcelApp.CreateDispatch(_T("Excel.Application")))
{
AfxMessageBox(_T("创建Excel失败"),MB_OK | MB_ICONWARNING);
return;
} m_ExcelBooks = m_ExcelApp.get_Workbooks(); // 获取一个工作簿集合
m_ExcelBook = m_ExcelBooks.Add(covOptional); // 添加一个工作簿 m_ExcelSheets = m_ExcelBook.get_Sheets(); // 获取一个工作表集合
m_ExcelSheet = m_ExcelSheets.get_Item(COleVariant((short))); // 获取一个工作表 // 向 Excel 中添加数据
// 选择工作表中 A1-A1 单元格区域
m_ExcelRange = m_ExcelSheet.get_Range(COleVariant( _T("A1")), COleVariant(_T("A1")));
m_ExcelRange.put_Value2(COleVariant( _T("变量名1"))); // 设置 A1 内容
m_ExcelCols = m_ExcelRange.get_EntireColumn(); // 选择整列
m_ExcelCols.put_HorizontalAlignment(COleVariant((long)-)); // 设置居中对齐 // 选择工作表中 B1-B1 单元格区域
m_ExcelRange = m_ExcelSheet.get_Range(COleVariant( _T("B1")), COleVariant(_T("B1")));
m_ExcelRange.put_Value2(COleVariant( _T("值"))); // 设置 B1 内容
m_ExcelCols = m_ExcelRange.get_EntireColumn(); // 选择整列
m_ExcelCols.put_HorizontalAlignment(COleVariant((long)-)); // 设置居中对齐 // 选择工作表中 C1-C1 单元格区域
m_ExcelRange = m_ExcelSheet.get_Range(COleVariant( _T("C1")), COleVariant(_T("C1")));
m_ExcelRange.put_Value2(COleVariant( _T("变量名2"))); // 设置 C1 内容
m_ExcelCols = m_ExcelRange.get_EntireColumn(); // 选择整列
m_ExcelCols.put_HorizontalAlignment(COleVariant((long)-)); // 设置居中对齐 // 选择工作表中 D1-D1 单元格区域
m_ExcelRange = m_ExcelSheet.get_Range(COleVariant( _T("D1")), COleVariant(_T("D1")));
m_ExcelRange.put_Value2(COleVariant( _T("值"))); // 设置 D1 内容
m_ExcelCols = m_ExcelRange.get_EntireColumn(); // 选择整列
m_ExcelCols.put_HorizontalAlignment(COleVariant((long)-)); // 设置居中对齐 // 选择工作表中 E1-E1 单元格区域
m_ExcelRange = m_ExcelSheet.get_Range(COleVariant( _T("E1")), COleVariant(_T("E1")));
m_ExcelRange.put_Value2(COleVariant( _T("和"))); // 设置 E1 内容
m_ExcelCols = m_ExcelRange.get_EntireColumn(); // 选择整列
m_ExcelCols.put_HorizontalAlignment(COleVariant((long)-)); // 设置居中对齐 for(int i = ;i < ;i++)
{
cellNum.Format(L"%d",i+);
cellNum = _T("A") + cellNum;
// 依次选择工作表中 A 列 的单元格
m_ExcelRange = m_ExcelSheet.get_Range(COleVariant(cellNum), COleVariant(cellNum));
m_ExcelRange.put_Value2(COleVariant(_T("a"))); // 设置 A 列内容 cellNum.Format(L"%d",i+);
cellNum = _T("B") + cellNum;
// 依次选择工作表中 B 列 的单元格
m_ExcelRange = m_ExcelSheet.get_Range(COleVariant(cellNum), COleVariant(cellNum));
m_ExcelRange.put_Value2(COleVariant(ValueArray1[i])); // 设置 B 列内容 cellNum.Format(L"%d",i+);
cellNum = _T("C") + cellNum;
// 依次选择工作表中 C 列 的单元格
m_ExcelRange = m_ExcelSheet.get_Range(COleVariant(cellNum), COleVariant(cellNum));
m_ExcelRange.put_Value2(COleVariant(_T("b"))); // 设置 C 列内容 cellNum.Format(L"%d",i+);
cellNum = _T("D") + cellNum;
// 依次选择工作表中 D 列 的单元格
m_ExcelRange = m_ExcelSheet.get_Range(COleVariant(cellNum), COleVariant(cellNum));
m_ExcelRange.put_Value2(COleVariant(ValueArray2[i])); // 设置 D 列内容 cellNum.Format(L"%d",i+);
cellNum = _T("E") + cellNum;
// 依次选择工作表中 E 列 的单元格
m_ExcelRange = m_ExcelSheet.get_Range(COleVariant(cellNum), COleVariant(cellNum));
m_ExcelRange.put_Value2(COleVariant(SumArray[i])); // 设置 E 列内容 } m_ExcelApp.put_Visible(FALSE); // 不显示 Excel 表格
m_ExcelApp.put_UserControl(FALSE); // 设置表格状态为用户不可控制 m_ExcelBook.SaveCopyAs(COleVariant(m_saveFilePath)); // 保存Excel表格
m_ExcelBook.put_Saved(TRUE); // 释放对象
m_ExcelBooks.ReleaseDispatch();
m_ExcelBook.ReleaseDispatch();
m_ExcelSheets.ReleaseDispatch();
m_ExcelSheet.ReleaseDispatch();
m_ExcelRange.ReleaseDispatch(); m_ExcelApp.Quit();          // 退出 Excel 程序,注意这里要先退出,后释放
m_ExcelApp.ReleaseDispatch(); }

  这段代码创建了一个 Excel ,然后向 Excel 中添加了 5 列 21 行的数据并保存到本地,最终所得到的 Excel 如下:

  整个代码不复杂,设置好一切后向 Excel 中添加数据即可,添加完数据后,记得保存表格,并释放相应的资源,否则程序结束后会有一个 Excel 进程驻留在内存中,这样重复运行程序时会出错。

MFC -- Excel操作简介(基于VS2010)的更多相关文章

  1. Python openpyxl、pandas操作Excel方法简介与具体实例

    本篇重点讲解windows系统下 Python3.5中第三方excel操作库-openpyxl: 其实Python第三方库有很多可以操作Excel,如:xlrd,xlwt,xlwings甚至注明的数据 ...

  2. .Net Excel操作之NPOI(一)简介

    一.NPOI简介 NPOI是一个开源项目,可以读/写xls,doc,ppt文件,有着广泛的应用. 使用NPOI能够帮助开发者在没有安装微软Office的情况下读写Office 97-2003的文件,支 ...

  3. Npoi导入导出Excel操作

    之前公司的一个物流商系统需要实现对订单的批量导入和导出,翻阅了一些资料,最后考虑使用NPOI实现这个需求. 在winform上面实现excel操作:http://www.cnblogs.com/Cal ...

  4. VS2010/MFC编程入门之三(VS2010应用程序工程中文件的组成结构)

    VS2010/MFC编程入门之三(VS2010应用程序工程中文件的组成结构)-软件开发-鸡啄米 http://www.jizhuomi.com/software/143.html   鸡啄米在上一讲中 ...

  5. 【Python】 更棒的Excel操作模块xlwings

    [xlwings] 说到Python操作Excel,有好多模块都可以支持这个工作.比如最底层的win32模块不仅可以操作Excel,还可以操作其他一众windows的软件. 其他的比较熟悉的有xlrd ...

  6. Qt之excel 操作使用说明

    学习背景: 适合熟悉些qt开发,但是不是深入了解的开发者学习.具体实现(qt 5.1版本),office2007 Excel做验证,Win 7(64位),如有讲解有误,欢迎斧正! 一.简单介绍 QAx ...

  7. .Net Excel操作之NPOI(二)常用操作封装

    一.Excel数据导出常用操作 1.指定表头和描述 2.指定数据库中读出的数据集合 二.ExcelExport封装 /// <summary> /// Excel常用的表格导出逻辑封装 / ...

  8. Python对Excel操作详解

      Python对Excel操作详解 文档摘要: 本文档主要介绍如何通过python对office excel进行读写操作,使用了xlrd.xlwt和xlutils模块.另外还演示了如何通过Tcl   ...

  9. python语言(六)mock接口开发、发邮件、写日志、新Excel操作

    一.urllib模块 urllib模块是一个标准模块,直接import urllib即可,在python3里面只有urllib模块,在python2里面有urllib模块和urllib2模块. url ...

随机推荐

  1. centos安装swoole

        编译安装swoole: cd && wget https://github.com/swoole/swoole-src/archive/1.8.6-stable.tar.gz  ...

  2. ICC Scenario Definition

    现代先进工艺下的后端设计都是在 MCMM 情况下设计的,所谓 MCMM 就是 muti-corner  muti-mode,用于芯片的不同工作模式和工作条件. 后端设计过程中,需要保证芯片在所有工作模 ...

  3. SERVICE问题解决方法

    这篇文章主要介绍了Windows服务器下出现ZendOptimizer.MemoryBase@NETWORK SERVICE问题解决方法,需要的朋友可以参考下 日志提示 事件 ID ( 2 )的描述( ...

  4. Mysql数据库 day1

    Mysql数据库属于关系型数据库(mysql.oracle.sql server),非关系型数据库有DB2.Redis MySQL执行原理,逻辑分层.更改数据库处理引擎 作者:Stanley 罗昊 [ ...

  5. SuperObject Delphi 的 JSON 属性乱序 - 操作类改造 - 关于属性顺序的问题

    Delphi 的 ISuperObject 属性顺序为随机.但是很多时候,是需要按加入顺序进行读取.我也看了网上很多人有类似需求.也有人问过原作者,作者答复为:JSON协议规定为无序.看了我真是无语. ...

  6. 记换换回收一个js逆向分析

    随着现在对数据的重视程度越来越高,现在各大网站都加强了反爬技术,比如本文中js加密 url地址:https://www.huanhuanhuishou.com/gujia/22201.html 需要爬 ...

  7. 开发自己的DataSet查看器

    记得在vs2002不是2003上没有DataSet调试器,断点时查看DataSet内容非常麻烦,最后有人开发了第三方工具解决了此问题. 后续的vs版本内部都自带的此工具可查看DataSet/DataT ...

  8. Autoanalyze 的注意事项

    磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面:PostgreSQL内部结构与源代码研究索引页    回到顶级页面:PostgreSQL索引页 根据官方文档的说明  http://www.p ...

  9. 【BZOJ1041】[HAOI2008]圆上的整点

    [BZOJ1041][HAOI2008]圆上的整点 题面 bzoj 洛谷 题解 不妨设\(x>0,y>0\) \[ x^2+y^2=r^2\\ y^2=(x+r)(x-r) \] 设\(r ...

  10. rabbitmq的安装和使用

    一.RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件).RabbitMQ服务器是用Erlang语言编写的,而群集和故障转移是构建在开放电信平台框架上的.所有 ...