MFC -- Excel操作简介(基于VS2010)
一、添加与 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)的更多相关文章
- Python openpyxl、pandas操作Excel方法简介与具体实例
本篇重点讲解windows系统下 Python3.5中第三方excel操作库-openpyxl: 其实Python第三方库有很多可以操作Excel,如:xlrd,xlwt,xlwings甚至注明的数据 ...
- .Net Excel操作之NPOI(一)简介
一.NPOI简介 NPOI是一个开源项目,可以读/写xls,doc,ppt文件,有着广泛的应用. 使用NPOI能够帮助开发者在没有安装微软Office的情况下读写Office 97-2003的文件,支 ...
- Npoi导入导出Excel操作
之前公司的一个物流商系统需要实现对订单的批量导入和导出,翻阅了一些资料,最后考虑使用NPOI实现这个需求. 在winform上面实现excel操作:http://www.cnblogs.com/Cal ...
- VS2010/MFC编程入门之三(VS2010应用程序工程中文件的组成结构)
VS2010/MFC编程入门之三(VS2010应用程序工程中文件的组成结构)-软件开发-鸡啄米 http://www.jizhuomi.com/software/143.html 鸡啄米在上一讲中 ...
- 【Python】 更棒的Excel操作模块xlwings
[xlwings] 说到Python操作Excel,有好多模块都可以支持这个工作.比如最底层的win32模块不仅可以操作Excel,还可以操作其他一众windows的软件. 其他的比较熟悉的有xlrd ...
- Qt之excel 操作使用说明
学习背景: 适合熟悉些qt开发,但是不是深入了解的开发者学习.具体实现(qt 5.1版本),office2007 Excel做验证,Win 7(64位),如有讲解有误,欢迎斧正! 一.简单介绍 QAx ...
- .Net Excel操作之NPOI(二)常用操作封装
一.Excel数据导出常用操作 1.指定表头和描述 2.指定数据库中读出的数据集合 二.ExcelExport封装 /// <summary> /// Excel常用的表格导出逻辑封装 / ...
- Python对Excel操作详解
Python对Excel操作详解 文档摘要: 本文档主要介绍如何通过python对office excel进行读写操作,使用了xlrd.xlwt和xlutils模块.另外还演示了如何通过Tcl ...
- python语言(六)mock接口开发、发邮件、写日志、新Excel操作
一.urllib模块 urllib模块是一个标准模块,直接import urllib即可,在python3里面只有urllib模块,在python2里面有urllib模块和urllib2模块. url ...
随机推荐
- 常用的npm命令
npm ls -g 列出全局安装的所有模块 npm ls webpack -g 查看全局安装的模块版本信息 npm view webpack versions 查看npm服务器上的全部版本信息 npm ...
- 微信小程序 置顶/取消置顶
wxml <view wx:for="{{confirmlist}}" wx:for-item="confirm" wx:for-index=" ...
- Hive学习之路 (二十)Hive 执行过程实例分析
一.Hive 执行过程概述 1.概述 (1) Hive 将 HQL 转换成一组操作符(Operator),比如 GroupByOperator, JoinOperator 等 (2)操作符 Opera ...
- 真机测试出现INSTALL_FAILED_USER_RESTRICTED安装错误
之前用小米测试的时候遇到一个问题,两个一样型号的手机一个能直接用Android Studio安装公司的项目一个却不可以,总是报INSTALL_FAILED_USER_RESTRICTED错误,具体见下 ...
- 使用vue.js实现checkbox的全选和多个的删除功能
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...
- c++——inline内联函数
1 inline内联函数 C++中的const常量可以替代宏常数定义,如: const int A = 3; #define A 3 C++中是否有解决方案替代宏代码片段呢?(替代宏代码片段就可以 ...
- dbcp最终版本
注意:我们在使用有参的queryrunner的时候,不需要关闭connection和DataSource 这些都queryrunner 都替我们完成.我们不需要关系资源释放. 工具类: package ...
- 测试html报告 github python3版本
github源码下载地址:https://github.com/huilansame/HTMLTestRunner_PY3/archive/master.zip 解压后进入文件找到文件:HTMLTes ...
- C#中的结构体与类的区别 (转载)
经常听到有朋友在讨论C#中的结构与类有什么区别.正好这几日闲来无事,自己总结一下,希望大家指点. 1. 首先是语法定义上的区别啦,这个就不用多说了.定义类使用关键字class 定义结构使用关键字str ...
- 参加360前端星计划总结(二)--HTML&CSS
HTML学习手册(英文版)html:the living standard 重要知识点 文档声明的作用a. 指定html的文档标准和版本b. 告诉浏览器渲染模式,有怪异模式(较为古老的模式,不写文档声 ...