MFC中Excel的导入以及使用步骤

参考地址


在需要对EXCEL表进行操作的类中添加以下头文件:若出现大量错误将其放入stdafx.h中

cpp 复制代码
#include "resource.h"       // 主符号
#include "CWorkbook.h"		//单个工作簿
#include "CRange.h"			//区域类,对Excel大部分操作都需要
#include "CWorkbooks.h"		//管理所有工作簿
#include "CApplication.h"	//Excel应用程序类,管理整个Excel应用

在类中添加以下变量定义:

cpp 复制代码
	//定义Excel中需要的工作簿以及工作表等
	CApplication m_App;
	CWorkbooks	m_Books;
	CWorkbook	m_Book;
	CWorksheets m_Sheets;
	CWorksheet	m_Sheet;
	CRange		m_Range;

然后就可以封装对应函数,以下为打开Excel表的例子,一般包括Excel的读写:

cpp 复制代码
//打开Excel表
int	CExcel_TestApp::OpenExcel(CString FileName)
{
	HRESULT Hr;//HRESULT函数返回值
	Hr = CoInitialize(NULL);//CoInitialize告诉Windows以单线程方式创建com对象
	if (FAILED(Hr))
	{
		AfxMessageBox(_T("调用函数失败!"));
	}
	LPDISPATCH LpDisp;
	COleVariant CovOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
	if (!m_App.CreateDispatch(_T("Excel.Application"), NULL))
	{
		AfxMessageBox(_T("无法启动EXCEL服务器!"));
		return 0;
	}
	m_Books.AttachDispatch(m_App.get_Workbooks);//得到工作簿
	LpDisp = m_Books.Open(FileName, CovOptional, CovOptional, CovOptional, CovOptional,
		CovOptional, CovOptional, CovOptional, CovOptional, CovOptional,
		CovOptional, CovOptional, CovOptional, CovOptional);
	m_Book.AttachDispatch(LpDisp);//得到单个工作簿
	m_Sheets.AttachDispatch(m_Book.get_Worksheets);//得到工作簿对应的工作表
	LpDisp = m_Book.get_ActiveSheet();//得到当前活跃的工作表
	m_Sheet.AttachDispatch(LpDisp);//获取到表
	return 1;
	}

若运行出错,将导入的所有包含#import "C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE" no_namespace头文件中的注释,将CRange.h中的DialogBox改为_DialogBox;

cpp 复制代码
int	MFC_OpenExcel::OpenExcel(CString FileName)
{
	HRESULT Hr;//HRESULT函数返回值
	Hr = CoInitialize(NULL);//CoInitialize告诉Windows以单线程方式创建com对象
	if (FAILED(Hr))
	{
		AfxMessageBox(_T("调用函数失败!"));
	}
	LPDISPATCH LpDisp;
	COleVariant CovOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
	if (!m_App.CreateDispatch(_T("Excel.Application"), NULL))
	{
		AfxMessageBox(_T("无法启动EXCEL服务器!"));
		return 0;
		}
	m_Books=m_App.get_Workbooks();//得到工作簿
	LpDisp = m_Books.Open(FileName, CovOptional, CovOptional, CovOptional, CovOptional,
		CovOptional, CovOptional, CovOptional, CovOptional, CovOptional,
		CovOptional, CovOptional, CovOptional, CovOptional, CovOptional);
	m_Book.AttachDispatch(LpDisp);//得到单个工作簿
	m_Sheets=m_Book.get_Worksheets();//得到工作簿对应的工作表
	LpDisp = m_Book.get_ActiveSheet();//得到当前活跃的工作表
	m_Sheet.AttachDispatch(LpDisp);//获取到表
	return 1;
	}
相关推荐
Crazy learner38 分钟前
C 和 C++ 动态库的跨语言调用原理
c语言·c++
金士顿4 小时前
MFC 文档模板 每个文档模板需要实例化吧
c++·mfc
人才程序员7 小时前
QML z轴(z-order)前后层级
c语言·前端·c++·qt·软件工程·用户界面·界面
w(゚Д゚)w吓洗宝宝了7 小时前
C vs C++: 一场编程语言的演变与对比
c语言·开发语言·c++
小老鼠不吃猫8 小时前
C++点云大文件读取
开发语言·c++
姚先生979 小时前
LeetCode 35. 搜索插入位置 (C++实现)
c++·算法·leetcode
不吃鱼不吃鱼9 小时前
Excel加载项入门:原理、安装卸载流程与常见问题
excel·wps
深耕AI9 小时前
在Excel中绘制ActiveX控件:解决文本编辑框定位问题
java·前端·excel
五VV9 小时前
Note2024122001_Excel按成绩排名
excel
CoderCodingNo9 小时前
【GESP】C++二级考试大纲知识点梳理, (4)流程图
开发语言·c++·流程图