MFC操作EXCEL例子

==> 学习汇总(持续更新)
==> 从零搭建后端基础设施系列(一)-- 背景介绍


因为其中原理我也不是很懂,所以目前只能按着基本步骤来,感兴趣的可以去看ATL/COM编程。

点击下载完整代码

效果如图:

步骤如下:
1.新建一个MFC工程(对话框)

新建过程中,记得要选择自动化。如图:

之后会自动添加如下头文件

#include <afxdisp.h>        // MFC 自动化类

2.用类向导添加EXCEL接口
如图:
1.

3.找到EXCEL.EXE所在的路径,然后复制上去,点击一下空白的地方就会出现下面的接口

4.添加基本的接口

一般肯定会用到的有CApplication、CWorkbooks、CWorkbook、CWorksheets、CWorksheet、CRange

其中CApplication用来打开EXCEL.EXE,CWorkbooks获取所有工作簿,CWorkbook一个工作簿,CWorksheets所有工作表,CWorksheet一个工作表
CRange操作单元格

如图:

完成-》确定即可

5.删掉每个头文件的第一句

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

然后在对话框头文件中添加这些头文件

6.做完上面的工作后,编译后出现如下错误

这时候只要把DialogBox改成_DialogBox,这下编译就通过了。

7.读取EXCEL数据

步骤:
1).打开EXCEL.EXE服务器

	//打开excel服务器
	if (!m_app.CreateDispatch(L"Excel.Application"))
	{
		AfxMessageBox(L"无法启动Excel服务器!");
		return FALSE;
	}

2).打开工作簿

	COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);

	//打开工作簿
	books = m_app.get_Workbooks();
	book = books.Open(m_fileName, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional);

3).打开工作表

	//获取工作表
	sheet = book.get_ActiveSheet();

4).获取单元格

	range = sheet.get_Cells(); //获取所有的,这个不能省
	range = range.get_Item(_variant_t(m_rRow), _variant_t(m_rCol)).pdispVal; //再获取指定的

5).获取单元格数据

	vResult = range.get_Value2();
	if (vResult.vt == VT_R8) //8字节的数字
		m_rRes.Format(TEXT("%lf"), vResult.dblVal);
	else if (vResult.vt == VT_BSTR) //字符串
		m_rRes = vResult.bstrVal;

6).关闭工作簿、释放对象

	//关闭工作簿
	books.Close();

	//释放对象
	range.ReleaseDispatch();
	sheet.ReleaseDispatch();
	sheets.ReleaseDispatch();
	book.ReleaseDispatch();
	books.ReleaseDispatch();

在初始化对话框中打开服务器
当程序退出的时候才关闭服务器,否则打开关闭打开关闭,速度很慢。

8.写入EXCEL数据

步骤:
1).打开EXCEL.EXE服务器

	//打开excel服务器
	if (!m_app.CreateDispatch(L"Excel.Application"))
	{
		AfxMessageBox(L"无法启动Excel服务器!");
		return FALSE;
	}

2).新建一个工作簿

	COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
	books = m_app.get_Workbooks();
	book = books.Add(covOptional);

3).新建一个工作表

	sheet = book.get_ActiveSheet();

4).获取单元格

	range = sheet.get_Cells();

5).写入数据

	range.put_Item(_variant_t(m_wRow), _variant_t(m_wCol),_variant_t(m_wRes));

6).保存

	book.SaveCopyAs(_variant_t(m_pathName));
	book.put_Saved(true);
	//如果是打开已有的,可以直接保存
	//book.Save();

6).关闭工作簿、释放对象

	//关闭工作簿
	books.Close();

	//释放对象
	range.ReleaseDispatch();
	sheet.ReleaseDispatch();
	sheets.ReleaseDispatch();
	book.ReleaseDispatch();
	books.ReleaseDispatch();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值