一、添加与 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. BZOJ1135:[POI2009]Lyz(线段树,Hall定理)

    Description 初始时滑冰俱乐部有1到n号的溜冰鞋各k双.已知x号脚的人可以穿x到x+d的溜冰鞋. 有m次操作,每次包含两个数ri,xi代表来了xi个ri号脚的人.xi为负,则代表走了这么多人 ...

  2. 【CF809E】Surprise me!

    题目 这是一道神仙题 看到这样一个鬼畜的柿子 \[\sum_{i=1}^n\sum_{j=1}^n\varphi(a_i\times a_j)\times dis(i,j)\] 又是树上距离又是\(\ ...

  3. 【node.js】模块系统、函数

    为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统. 一个 Node.js 文件就是一个模块,这个文件可能是JavaScript 代码.JSON 或者编译过的C/C++ 扩 ...

  4. ethereumjs/ethereumjs-account-2-test

    ethereumjs-account/test/index.js const Account = require('../index.js') const tape = require('tape') ...

  5. standard cell timing model

    standard cell timing model 主要包括两方面的信息: Cell Delay  calculation Output Transition  calculation 首先,cel ...

  6. maven错误The JAVA_HOME environment variable is not defined correctly

    晚上,当我准备将好的spring boot通过mvn clean package 打包成jar文件上传到linux服务器时,却在打包过程中出现了错误: C:\>mvn -version The ...

  7. 为Python加入默认模块搜索路径

    为Python加入默认模块搜索路径 方法一:函数加入 1) import sys 2) 查看sys.path 3) 加入sys.path.append("c:\\") 方法二:改动 ...

  8. Spring的简单应用与基本原理

    一:重要概念理解 Spring很简单,一定不要想得太复杂,只是有些东西很拗口而已 1:IOC(控制反转) 概念:利用反射的原理将对象创建的权利交给了Spring,Spring在运行的时候根据配置文件( ...

  9. MongoDB4.0+版本安装

    >>>首先要下载MongoDB软件安装包, MongoDB社区版官网下载 >>>双击msi安装文件进行安装,点击"Next" >>& ...

  10. python3爬虫-下载网易云音乐,评论

    # -*- coding: utf-8 -*- ''' 16位随机字符的字符串 参数一 获取歌曲下载地址 "{"ids":"[1361348080]" ...