一、添加与 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. Day7 Tomcat和servlet

    web服务器 1)        什么是web服务器 硬件:性能强大的计算机(无显示屏) 操作系统: linux 软件:web服务器软件(将数据放置在服务器上就可以被外部访问) web应用程序 2)  ...

  2. Vue核心技术 Vue+Vue-Router+Vuex+SSR实战精讲

    第1章 课程介绍课程介绍,介绍课程的章节安排和学习本门课程的一些注意点.1-1 课程导学 试看1-2 项目介绍1-3 Webpack4升级注意 第2章 Vue+Webpack的前端工程工作流搭建详细讲 ...

  3. C++:引用的简单理解

    前言:引用是C++一个很重要的特性,最近看了很多有关引用的资料和博客,故在此对引用的相关知识进行总结 一.什么是引用 引用,顾名思义是某一个变量或对象的别名,对引用的操作与对其所绑定的变量或对象的操作 ...

  4. smtp发送html报告与日志附件图片png

    1.非ssl发送: 授权码机制,开启smtp,获取授权码以qq邮箱为例: 附件展示: #!/usr/bin/python3 import os import smtplib from email.mi ...

  5. python logging模块按天滚动简单程序

    简单日志按天滚动,加入apsheduler,用crontab模式按小时运行测试: import logging from logging.handlers import TimedRotatingFi ...

  6. P1131 [ZJOI2007]时态同步

    题目描述 小Q在电子工艺实习课上学习焊接电路板.一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字1,2,3….进行标号.电路板的各个节点由若干不相交的导线相连接,且对于电路板的任何两个节点 ...

  7. MyBatis的缓存分析

    一:MyBatis缓存简介 MyBatis支持声明式数据缓存(declarative data caching).当一条SQL语句被标记为“可缓存”后,首次执行它时从数据库获取的所有数据会被存储在一段 ...

  8. 关闭生产订单时报错“订单&的未处理将来更改记录组织删除标记/完成”,消息号CO688

    消息号 CO688 诊断 仍存在未来的更改记录,或从订单的确认过程的确认中要处理的错误记录.可能的确认过程是: 自动收货 反冲 实际成本的计算 数据传输至 HR 系统响应 未打算对订单设置删除标记/‘ ...

  9. PHP+MySQL实现海量数据导入导出的总结:is_numbric函数的坑

    前段时间有个需求:将生产环境的部分数据转移到测试服务器进行测试.由于只需要导入特定账号的数据,我就想着将写个脚本,将数据组装成sql语句导出为sql文件,然后转移到测试服务器,导入到MySQL中.想象 ...

  10. 六、Delphi10.3通过Json.Serializers单元对大量数据序列化

    一.参考我之前的博客,Delphi可以很方便的把类和结构体转换成JSON数据,但是数据量大了,就会非常之慢,1万条数据需要20秒左右.如果引用Serializers单元,那么100万数据只需要4秒左右 ...