VS2015:在MFC下实现Excel文件读写操作

VS2015:在MFC下读写Excel文件


前言

visual studio 2015下使用MFC实现可视化编程,并对Excel文件进行读写操作

开发环境:Visual Studio 2015、Office2016(版本可以随意)


一、创建MFC项目

创建MFC测试demo,这里我直接创建一个基于对话框的MFC应用程序
在这里插入图片描述
(注意:这里选择基于对话框,选择之后直接点击完成)
在这里插入图片描述
创建完之后,直接运行一下,看项目是否正常!!!


二、引入Excel资源类

在工程上进入:项目→类向导
在这里插入图片描述
选中添加类的第二项:类型库中的MFC类
在这里插入图片描述
在这里插入图片描述
只要你安装了office,你就能找到如下的文件,根据你装的64或者是x86位,分别在Program Files或者Program Files(x86)中就可以找到相对应的Microsoft Office程序目录,然后在找到其子文件夹,就可以找到EXCEL.EXE,添加之后就会出现如下的接口
在这里插入图片描述
导入资源之后然后再引入这些接口,因此选择接口然后点击单箭头>:_Application、_Workbook、_Worksheet、_Font、_Range、_Workbooks、_Worksheets。如下图所示:
在这里插入图片描述
导入之后会出现如下.h文件
在这里插入图片描述
在创建项目的头文件下加入Excel类的头文件:
在这里插入图片描述

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

运行程序会报错,错误如下所示:
在这里插入图片描述
进入刚刚添加的.h文件中,分别注释它们如下代码:

//#import "C:\\Program Files\\Microsoft Office\\Office16\\EXCEL.EXE" no_namespace

然后再运行项目,出现如下错误:
在这里插入图片描述
进入CRange.h文件中

将DialogBox改为_DialogBox

运行项目成功,至此环境配置成功!!!

三、实现Excel读取

在dialog界面里面加入一个响应按钮:
在这里插入图片描述
添加如下代码:

//打开指定Excel文件,如果不存在就创建
	char path[MAX_PATH];
	GetCurrentDirectory(MAX_PATH, (TCHAR*)path);//获取当前路径
	CString strExcelFile = (TCHAR*)path;
	CString strdevName = _T("\\data.xlsx");	   //xls也行
	strExcelFile += strdevName;

	CApplication App;//创建应用实例
	CWorkbooks Books;//工作簿,多个Excel文件
	CWorkbook Book;//单个工作簿
	CWorksheets sheets;//多个sheets页面
	CWorksheet sheet;//单个sheet页面
	CRange range;//操作单元格
	CRange iCell;
	LPDISPATCH lpDisp;
	COleVariant vResult;  //COleVariant类是对VARIANT结构的封装
	COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);


	if (!App.CreateDispatch(_T("Excel.Application"), NULL))
	{
		AfxMessageBox(_T("无法启动Excel服务器!"));
		return;
	}


	Books.AttachDispatch(App.get_Workbooks());
	lpDisp = Books.Open(strExcelFile, covOptional, covOptional,
		covOptional, covOptional, covOptional, covOptional, covOptional,
		covOptional, covOptional, covOptional, covOptional, covOptional,
		covOptional, covOptional);


	//得到Workbook    
	Book.AttachDispatch(lpDisp);
	//得到Worksheets   
	sheets.AttachDispatch(Book.get_Worksheets());
	//得到当前活跃sheet 
	//如果有单元格正处于编辑状态中,此操作不能返回,会一直等待 
	lpDisp = Book.get_ActiveSheet();
	sheet.AttachDispatch(lpDisp);

	//获取行列号
	range = sheet.get_UsedRange();
	range = range.get_Rows();
	long rows = range.get_Count();
	range = range.get_Columns();
	long columns = range.get_Count();

	for (long i = 1; i < columns + 1; i++)
	{
		
		for (long j = 1; j < rows + 1; j++)
		{
			range.AttachDispatch(sheet.get_Cells());
			range.AttachDispatch(range.get_Item(COleVariant(j), COleVariant((long)i)).pdispVal);   //第一变量是行,第二个变量是列,即第i行第j列
			vResult = range.get_Value2();
			CString str;

			if (vResult.vt == VT_BSTR) //字符串  
			{
				str = vResult.bstrVal;
				MessageBox(str);
			}
			else if (vResult.vt == VT_R8) //8字节的数字  
			{
				str.Format(_T("%f"), vResult.dblVal);
				MessageBox(str);
			}
		}
	}
	Books.Close();
	App.Quit();
	//释放对象      
	range.ReleaseDispatch();
	sheet.ReleaseDispatch();
	sheets.ReleaseDispatch();
	Book.ReleaseDispatch();
	Books.ReleaseDispatch();
	App.ReleaseDispatch();

总结

利用c++对Excel文件进行读取操作。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值