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

MFC使用 专栏收录该内容
2 篇文章 0 订阅

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文件进行读取操作。

  • 0
    点赞
  • 0
    评论
  • 24
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

wang_zhip

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值