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 ...
随机推荐
- Elasticsearch简单使用和环境搭建
Elasticsearch简单使用和环境搭建 1 Elasticsearch简介 Elasticsearch是一个可用于构建搜索应用的成品软件,它最早由Shay Bannon创建并于2010年2月发布 ...
- macaca常见错误排查
1.Error: cannot resolve path (or pattern) 'macaca-test' 这是因为执行run命令的时候未进入用例目录 C:\Users\Tony\node_mod ...
- Day10 上传和下载
上传 将本地文件传输到服务器 jsp: 文件上传的请求方式必须是post input的type必须是file enctype="multipart/form-data" ...
- Day8 Servlet
HttpServletRequest 说明 公共接口类HttpServletRequest继承自ServletRequest.客户端浏览器发出的请求被封装成为一个HttpServletRequest对 ...
- 《信息安全技术》实验二 Windows口令破解
<信息安全技术>实验二 Windows口令破解 实验目的 了解Windows口令破解原理 对信息安全有直观感性认识 能够运用工具实现口令破解 实验环境 实验机Windows Server ...
- ethers.js-1
https://docs.ethers.io/ethers.js/html/ What is ethers.js The ethers.js library aims to be a complete ...
- Sequelize-nodejs-11-Raw queries
Raw queries原始查询 就是使用了原始的查询语句,如UPDATE users SET y = 42 WHERE x = 12 As there are often use cases in w ...
- oracle之修改/忘记用户密码
一.修改/忘记用户密码: ## 修改oracle用户名和密码 sqlplus /nolog ## DBA角色进入 conn /as sysdba; ## 查看用户列表 select username ...
- js之radio应用实例
radio和checkbox还有select,可谓是前后端常用三剑客啊!特别是checkbox和select,关于这两个今天不讲,因为在下面这几篇文章,我已经比较详细的讲解了. SpringMVC之a ...
- CAN网要不要共地?
重要:CAN网要不要共地? 因为CAN传输采用差分传输的方式,即使不共地,部分情况下仍然能传输数据,但是本人以实际的经验告诉你们,一定要共地! 1. 不共地会引入共模干扰,轻则影响正常 ...