MFC操作EXCEL例子

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


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

点击下载完整代码

效果如图:
MFC操作EXCEL例子_第1张图片

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

新建过程中,记得要选择自动化。如图:
MFC操作EXCEL例子_第2张图片

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

#include         // MFC 自动化类

2.用类向导添加EXCEL接口
如图:
1.
MFC操作EXCEL例子_第3张图片

MFC操作EXCEL例子_第4张图片

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

MFC操作EXCEL例子_第5张图片

4.添加基本的接口

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

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

如图:
MFC操作EXCEL例子_第6张图片

完成-》确定即可

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

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

然后在对话框头文件中添加这些头文件
MFC操作EXCEL例子_第7张图片

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

MFC操作EXCEL例子_第8张图片

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

MFC操作EXCEL例子_第9张图片

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();

你可能感兴趣的:(MFC)