MFC 与Excel文件的交互操作

MFC利用List Control实现Excel部分功能:单个单元格编辑、多行数据粘贴、左键框选统一框选范围所有数据。 MFC List Control实现部分Excel功能:单个单元格编辑、多行粘贴、左键拖拽框选 阅读详情

    假日快要结束了,带着沉重的心情写下之前关于MFC与Excel文件交互的总结。由于VS的版本不同可能在操作上有些差异,所以在此指明下本篇文章的工程环境为VS2013,也建议大家用最新的。

    说到程序对于Excel的操作,应该不能算是什么新需求了,方法也有好几种,诸如利用office提供的接口、开源代码之类的。本文在查了一些资料之后选择了实现起来较为反便的一种。其实现的方法基本上完全照抄的这篇文章的,如果看本篇不大明白的可以去看看。

    参考的文章说,“踏破铁鞋无觅处,得来费死了工夫”,然而进过了博主的努力,后人需要做的也就是看一看,抄一抄就完事了,开源的力量伟大至极,本篇将发扬博主的精神,在整理内容的同时,写出一个Demo工程提供下载,如果懒得做这些工作的人只需要下载了这个工程就可以直接用起来了(亲测可以),工程在最后面给出。

   原文地址

    下面开始主要内容

    第一步:创建一个空的MFC对话框工程

    第二步:下拉VS菜单栏的“项目”项,选择添加类。在弹出对话框中选中“TypeLib中的MFC类”,点击添加,弹出“从类型库添加类向导”对话框。

    

    第三步:弹出的对话框如下图,“从以下来源添加类”中有两个选项,如果选择的是“注册表”,在“可用的类型库”中选择“Microsoft Excel 15.0 Object Library<1.8>”(Office版本不同可能有些许差异,这个是Office2013)。如果选择的是“文件”,则"位置"选择Office安装路径下的EXCEL.EXE,本人32位Office的默认安装,路径为“C:\Program Files (x86)\Microsoft Office\Office15\EXCEL.EXE”。上面两个选项达到的效果是一样的,只是路径不同而已,做完效果如下:


    第四步:选中“接口”中的“_Application”,“_WorkSheet”,“_WorkBook”,“WorkSheets”,“WorkBooks”,“Range”这几项,放到右边去,点击完成,如下图:


    第五步:做完第四步后,工程中会多出几个导入类的头文件“CApplication.h”,“CWorkSheet.h”,“CWorkBook.h”,“CWorkSheets.h”,“CWorkBooks.h”,“CRange.h”,将每一个头文件里面的都有的第一句代码“#import "C:\\Program Files (x86)\\Microsoft Office\\Office15\\EXCEL.EXE" no_namespace”(路径可能不同)都注释掉。如下图:


    第六步:既然有头文件,自然就要包含这些头文件啦,在需要调用的文件头写入如下代码:

#include "CApplication.h"
#include "CRange.h"
#include "CWorkbook.h"
#include "CWorkbooks.h"
#include "CWorksheet.h"
#include "CWorksheets.h"
     第七步:这个时候按理说环境已经是搭建好了,但是点击编译还是会报出语法错误,幸好前文提到的博客也给出了解决方法,定位到"CRange,h",将
VARIANT DialogBox()
{
	VARIANT result;
	InvokeHelper(0xf5, DISPATCH_METHOD, VT_VARIANT, (void*)&result, NULL);
	return result;
}
    中的DialogBox改为_ DialogBox,现在编译就没有问题了,接下来调用就可以了,调用代码如下:

CApplication app;
CWorkbooks books;
CWorkbook book;
CWorksheets sheets;
CWorksheet sheet;
CRange range;
LPDISPATCH lpDisp;
COleVariant vResult;
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
if (!app.CreateDispatch(L"Excel.Application"))
{
	AfxMessageBox(L"无法启动Excel服务器!");
	return;
}
books.AttachDispatch(app.get_Workbooks());
CString path = L"demo.xlsx";//文件路径

TCHAR szPath[MAX_PATH];//获得当前执行路径
GetModuleFileName(NULL, szPath, MAX_PATH);
CString PathName(szPath);
PathName=PathName.Left(PathName.ReverseFind(_T('\\')) + 1);

lpDisp = books.Open(PathName+path, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional);

book.AttachDispatch(lpDisp);//得到Workbook  
sheets.AttachDispatch(book.get_Worksheets());//得到Worksheets  

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

//读取第rows行、第cols列单元格的值
/*如果遍历则反复执行这段代码并判断界限*/
int rows = 1, cols = 2;
range.AttachDispatch(sheet.get_Cells());
range.AttachDispatch(range.get_Item(COleVariant((long)rows), COleVariant((long)cols)).pdispVal);
vResult = range.get_Value2();
CString data;
if (vResult.vt == VT_BSTR)//字符串  
{
	data = vResult.bstrVal;
}
else if (vResult.vt == VT_R8)//8字节的数字  
{
	data.Format(L"%.0f", vResult.dblVal);
}
else if(vResult.vt==VT_EMPTY)//单元格空的
{
	data = "";
}
MessageBox(data);
/*如果遍历则反复执行这段代码并判断界限*/

//释放对象    
books.Close();
app.Quit();// 退出  
range.ReleaseDispatch();
sheet.ReleaseDispatch();
sheets.ReleaseDispatch();
book.ReleaseDispatch();
books.ReleaseDispatch();
app.ReleaseDispatch();

    OK,到此便实现了Excel数据的读取,至于创建和写入也差不多,以后有用到再添加上来。

    工程下载(VS2013)



 

C++ MFC实现list控件对Excel的读取 前面已经讲过了C++ MFC程序对Excel文件的写入,链接如下: https://blog.youkuaiyun.com/V_Gogol/article/details/81782644 后面很长时间没有更新读取数据操作,非常抱歉!看到网上有朋友问了读取的方法,于是就再写一了这一篇关于读取操作的博文。 读取和写入大体相似,要引入的头文件和相关配置也是一样的,具体可以先看上面那一篇关于写入的博文,此篇为... 阅读详情

相关推荐

VS2017 MFC操作Excel

1.首先安装OFFICE软件[Office 2021 ProPlus],此版本为OFFICE16 2.进入VS开发环境,使用快捷键调出CTRL+SHIFT+A调出【添加类】 选中Visual C++=》MFC=》Typelib中的MFC类 OFFICE的Excel地址为:C:\Program Files\Microsoft Office\root\Office16,其他OFFICE版本大同小异 3.设置 ...

Jockr 3346

利用MFC处理Excel的几种方式

据很多地方说,用MFC处理Excel的方式有4种,或者更多...由于学浅,

u012889884的专栏 1万+

c++操作excel(CApplication、CWorkbook、CWorksheet、CHyperlinks)代码

首先创建MFC,打开类向导,添加类(类型库中的MFC类),选择文件位置(EXCEL.exe),添加类需要的类(参考下面代码的头文件),会生成对应的头文件(CWorkbook.h、CHyperlinks.h…) 注释每个生成的头文件中的代码: //#import "C:\\Program Files\\Microsoft Office\\Office15\\EXCEL.EXE" no_names...

chanshibing的博客 6557

mfc对Excel的操作

mfc对Excel的操作:导入数据,导出数据。

Goodenough的博客 5519

vs2012 Office2013 读写excel文件

环境:win7 64+VS2012+Office2013+MFC。 说明:读写excel文件,通常包括1.ODBC数据库实现;2.通过解析Excel表格文件;3.通过OLE/COM的几种实现方法。本文主要研究通过OLE/COM实现对Excel表格的操作。 步骤: 1.新建MFC对话框。注意勾选自动化,否则后面加入不了需要的库,导致启动服务失败等错误。有的博客说需要加入 1 if (!AfxOleInit()) 2 { 3 AfxMessageBox(IDP_OL...

技术联盟 832

MFC与Excel的交互操作实现

在当今信息技术日新月异的背景下,自动化办公的需求愈显突出,而Microsoft Excel作为办公自动化中不可或缺的工具之一,其与其他应用软件的交互显得尤为重要。本章将介绍MFC(Microsoft Foundation Classes)与Excel交互的基础概念,为理解后续章节内容打下坚实的基础。

weixin_35094083的博客 982

使用MFC操作EXCEL文件

使用MFC操作EXCEL文件 分类: EXCEL 2012-09-03 09:30 14914人阅读 评论(5) 收藏 举报 excelmfcbooks工作applicationoffice 一、加载 1、 在VC6.0里创建一个MFC工程 2、打开MFCClassWizard窗口(查看—>建立类向导),选择Automation,单击AddClass按钮,选择Froma type libr

worldy的专栏 2884

掌握MFC在Windows应用程序中读写Excel文件

在现代软件开发中,MFC(Microsoft Foundation Classes)与Excel的交互是自动化办公和数据处理中的一项重要技术。通过使用MFC进行Excel自动化,开发者能够在自己的应用程序中实现对Excel文档的控制,包括但不限于读取数据、生成报表、执行复杂的数学计算,甚至修改Excel文档格式等。

weixin_35755823的博客 884

VS2008环境使用MFC操作操作excel文件

1. 建立MFC工程,MDI(基于对话框),其他默认即可。 2. 操作Excel文件初始化: a. project->add class->MFC class from typelib (项目->添加类->Typelib中的MFC类)导入Excel.exe,(即选择你的office安装路径下的excel.exe加入),我的2010版的office,在C:\Program Files\M

shizhandong50的专栏 887

VC/MFC中实现Excel数据直接读写操作指南

Office自动化是指通过编程接口控制Office应用程序,例如Word、Excel、Outlook等。自动化接口是一种允许开发者编写脚本或应用程序来操作Office软件的机制。通过自动化,开发者可以自动化日常任务,比如生成报告、发送电子邮件等。Office自动化接口通常采用基于COM(Component Object Model)的接口,允许不同语言编写的程序通过接口交换信息和命令。自动化技术让办公软件不仅仅是手动工具,还能够与企业内部其他系统集成,实现数据处理的自动化和流程化。

weixin_42230607的博客 1592

Duilib结合Excel与JSON的数据操作实践

Duilib是一个轻量级的C++ UI库,它提供了一套简单易用的界面开发框架。它是基于MFC的对话框扩展,因此,熟悉MFC的开发者可以更容易上手。Duilib广泛应用于开发桌面应用程序的用户界面,尤其是当需要快速开发或者维护已有的MFC项目时。

weixin_42612804的博客 660

使用VC++操作Excel文件

本文档适用于: ·                      Microsoft Foundation Classes (MFC), Microsoft Visual C++, 32-bit Editions, version 6.0以上 ·                      Microsoft OLE库  第一步:建立一个自动化工程 3.

Woosa 1111

VS2019 MFC下使用ODBC读写EXCEL表格

VS2019 MFC下使用ODBC读写EXCEL表格

VS2008中C++打开Excel(MFC)

第一步:建立project 选择C++下的MFC Application 选择dialog based,中文。之后点击finish 第二步:导入EXCEL头文件 选择Project->AddClass->MFC Class From Typelib后,点击Add,进入MFC ClassFrom Typelib Wi

浮尘丶若梦 675

如何入门强化学习

很多同学在入门强化学习的时候都会遇到困难,那我这里就简单介绍一下应该如何入门强化学习,并以开源代码为例详解强化学习实战。

seeksister的博客 3304

Tessent IJTAG ICL:从规范到实践的硬件描述语言指南

本文深入解析Tessent IJTAG ICL语言在硬件测试中的应用,从规范到实践提供全面指南。通过模块化设计、网络提取与编辑等实战技巧,帮助工程师高效构建标准化测试网络,显著提升芯片测试效率与覆盖率。特别分享TDR/SIB/TAP的ICL实现方法及调试策略,适用于SoC、车载芯片等复杂场景。

weixin_33606346的博客 301
上一篇: MFC 控件字体样式和颜色设置
下一篇: CUDA 实现JPEG图像解码为RGB数据
_寒潭雁影
博客等级 码龄14年 2809粉丝 343原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值