c++在MFC框架下实现读取Excel文件

c++在MFC框架下实现读取Excel文件在这里总结下在 Window 下如何读取 Excel 表格数据 方便自己学习和使用 网上的内容呢或多或少不太详细或者有些许错误 在这里总结下使用经验 1 首先在你的工程中要包含 Excel 的数据类 而数据类的导出可以借用 MFC 的类向导进行添加右键工程 选择添加 添加类 MFC TypeLib 中的 MFC 类 如图 1 1 所示 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 图 1 1 点击添

 在这里总结下在Window下如何读取Excel表格数据,方便自己学习和使用,网上的内容呢或多或少不太详细或者有些许错误,在这里总结下使用经验。

1. 首先在你的工程中要包含Excel的数据类,而数据类的导出可以借用MFC的类向导进行添加

右键工程,选择添加 ->添加类->MFC->TypeLib中的MFC类(如图 1.1所示

c++在MFC框架下实现读取Excel文件

c++在MFC框架下实现读取Excel文件 c++在MFC框架下实现读取Excel文件
 
 
 
 
 
 
 
 
 
 图 1.1




点击添加之后出现添加类界面,选择从文件中添加,再浏览你安装的office中Excel.exe的位置。并添加下面的文件(
如图 1.2所示

c++在MFC框架下实现读取Excel文件


          图 1.2


 然后你发现,有几个文件以及加入到你的解决方案中了,常用的几个文件是CApplication.h CFont0.h CRange.h CWorkbook.h

CWorkbooks.h CWorksheet.h CWorksheets.h

结果你编译工程后发现有一万个错误,别担心,那是因为上面的这些导出文件,导出的时候加了一句导出标记

#import "C:\\Program Files (x86)\\Microsoft Office\\Office12\\EXCEL.EXE" no_namespace

 现在把导出文件的这些开头的import语句删除或者注释,你发现OK,还是有错误,不过已经很少了。

然后把CRange中的DialogBox() 接口,修改为,_DialogBox()。 OK大功告成!现在可以在你的代码中使用Excel的接口了。

在头文件中申请变量空间。不要忘记包含头文件

#include "CApplication.h" #include "CFont0.h" #include "CRange.h" #include "CWorkbook.h" #include "CWorksheet.h" #include "CWorkbooks.h" #include "CWorksheets.h" CApplication m_oExcelApp; CWorksheet m_oWorkSheet; CWorkbook m_oWorkBook; CWorkbooks m_oWorkBooks; CWorksheets m_oWorkSheets; CRange m_oCurrRange;

调用代码示例:

 LPDISPATCH lpDisp = NULL; COleVariant covTrue((short)TRUE); COleVariant covFalse((short)FALSE); COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); CRange oCurCell; // 创建连接 if (!m_oExcelApp.CreateDispatch(_T("Excel.Application"))) { ::MessageBox(NULL, _T("创建Excel服务失败!"), _T("错误提示!"), MB_OK | MB_ICONERROR); return; } m_oWorkBooks.AttachDispatch(m_oExcelApp.get_Workbooks()); // 打开文件 lpDisp = m_oWorkBooks.Open("文件的路径", _variant_t(vtMissing), _variant_t(vtMissing), _variant_t(vtMissing), _variant_t(vtMissing), _variant_t(vtMissing), _variant_t(vtMissing), _variant_t(vtMissing), _variant_t(vtMissing), _variant_t(vtMissing), _variant_t(vtMissing), _variant_t(vtMissing), _variant_t(vtMissing), _variant_t(vtMissing), _variant_t(vtMissing)); m_oWorkBook.AttachDispatch(lpDisp); m_oWorkSheets.AttachDispatch(m_oWorkBook.get_Worksheets()); //lpDisp = m_oWorkBook.get_ActiveSheet(); //m_oWorkSheet.AttachDispatch(lpDisp); // 获取第几个sheet表就写几 m_oWorkSheet.AttachDispatch(m_oWorkSheets.get_Item(_variant_t((long)2)), TRUE); // 获取行数和列数 CRange usedRange; CRange mRange; usedRange.AttachDispatch(m_oWorkSheet.get_UsedRange()); mRange.AttachDispatch(usedRange.get_Rows(), TRUE); int nCount = mRange.get_Count(); mRange.ReleaseDispatch(); mRange.AttachDispatch(usedRange.get_Columns(), TRUE); int nLines = mRange.get_Count(); usedRange.ReleaseDispatch(); mRange.ReleaseDispatch(); // 读取 COleVariant vResult; CString strData = ""; for (int j = 1; j <= nLines; j++) { m_oCurrRange.AttachDispatch(m_oWorkSheet.get_Cells()); m_oCurrRange.AttachDispatch(m_oCurrRange.get_Item(COleVariant((long)i), COleVariant((long)j)).pdispVal); vResult = m_oCurrRange.get_Value2(); if (vResult.vt == VT_BSTR) { strData = vResult.bstrVal; } else if (vResult.vt == VT_R8) { int nData = (int)vResult.dblVal; } else { //AfxMessageBox(_T("数据类型错误!")); } m_oCurrRange.ReleaseDispatch(); } m_oWorkBooks.Close(); m_oExcelApp.Quit(); m_oCurrRange.ReleaseDispatch(); m_oWorkSheet.ReleaseDispatch(); m_oWorkSheets.ReleaseDispatch(); m_oWorkBook.ReleaseDispatch(); m_oWorkBooks.ReleaseDispatch(); m_oExcelApp.ReleaseDispatch(); 

这个是获取当前的活动项 

这个是获取第几个sheet表就写几


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/225532.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 上午9:06
下一篇 2026年3月17日 上午9:07


相关推荐

  • Java+SQLServer实现——网上图书馆借还管理系统

    Java+SQLServer实现——网上图书馆借还管理系统完整版zip:http://download.csdn.net/detail/wsk1103/9702747PS:这是刚学Java时自己手写的一个垃圾项目,质量低,但是可以运行。已经放弃维护。。。。。。。。。1概述网络的发展越来越快,网上图书馆也毫不例外。因此,网上图书馆就此诞生了,学生对知识的渴望也是越来越大,并且通过网络来订阅图书是一件非常轻松的事情。本系统是一个…

    2022年5月22日
    37
  • 谈谈CListCtrl 扩展风格设置方法-SetExtendedStyle和ModifyStyleEx 比较[通俗易懂]

    谈谈CListCtrl 扩展风格设置方法-SetExtendedStyle和ModifyStyleEx 比较[通俗易懂]谈谈CListCtrl扩展风格设置方法————————————–SetExtendedStyle和ModifyStyleEx比较 对于初学者来说,当他需要设定listctrl的扩展风格时,常常想到用ModifyStyleEx来设定,代码如下:ModifyStyleEx(0,LVS_EX_GRIDLINES)这是不正确的,正

    2022年7月19日
    21
  • MPP数据库实现入门

    MPP数据库实现入门大规模并行分析 MPP 数据库自诞生以来 为数据驱动型企业提供了巨大的机会 近日 HashData 联合创始人王占伟围绕 MPP 数据库的基础原理及技术特点与网友进行了分享交流 本文摘选部分精彩观点 与大家共享 如上图所示 MPP 数据库内核主要包括模块查询 编译查询 优化任务调度查询 执行存储 MPP 数据库的 API applicationp 或者命令行接收到了 SQL 查询请求之后 系统先经过查询编译 然后查询优化 通过任务调度执行从存储引擎里面把数据拉出来 计算出结果

    2026年3月18日
    3
  • phpstorm2021.3.3 激活码破解方法

    phpstorm2021.3.3 激活码破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    800
  • spring的配置文件-applicationContext.xml

    spring的配置文件-applicationContext.xml1.<beans>标签是spring的配置文件的根标签,其包含相关的命名空间,用于约束子标签的标识<?xmlversion=”1.0″encoding=”UTF-8″?><beansxmlns=”http://www.springframework.org/schema/beans”xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”xmlns:aop=”http://www.s

    2022年7月13日
    18
  • GitHub 近两万 Star,无需编码,可一键生成前后端代码,这个开源项目有点强!

    点击上方“全栈程序员社区”,星标公众号 重磅干货,第一时间送达 github地址:https://github.com/zhangdaiscott/jeecg-boot 项目介绍:…

    2021年6月28日
    192

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号