MFC读取Excel(一)

2023-11-18

软件:vs2013

程序功能:MFC读取Excel里的第一个单元格的值

步骤:

第一步:创建基于对话框的MFC工程

第二步:添加库、添加Excel类库

在工程名上右键,选择“添加”—“类”(或者点击菜单栏的“项目”->“添加类”),选择“TypeLib中的MFC类”(MFC Class From TypeLib)

类来源选“注册表”,在可用的类型库中选择“Microsoft Excel 12.0 Object Library<1.6>”在接口列表框中选择需要的类,在此,我们选择_Application,_Workbook,Worksheet,Range,Workbooks,Worksheets这六个就可以了。

但是有的接口里没东西,例如:

怎么办呢?不急。可以选“文件”,找到EXCEL.EXE的位置,来进行添加:(我的位置在:D:\office\Office14\EXCEL.EXE)

第三步:修改头文件

分别将加进来的六个头文件上面的“#import "C:\\Program Files\\Microsoft Office\\OFFICE11\\EXCEL.EXE" no_namespace”注释掉。

第四步:编译,修改错误

编译,会出现两个错误:

…\crange.h(335): warning C4003: “DialogBoxW”宏的实参不足

…\crange.h(335): error C2059: 语法错误:“,”

双击错误提示,定位在错误行,

    VARIANT DialogBox()

    {

         VARIANT result;

         InvokeHelper(0xf5, DISPATCH_METHOD, VT_VARIANT, (void*)&result, NULL);

         return result;

    }

将该函数名“DialogBox()”前面加“_”下划线,即“_DialogBox()”,这样就可以编译成功了。

第五步:删除对话框内容,添加对应控件

在对话框中添加“读取”按钮

第六步:代码(可以直接将代码复制运行下)

添加头文件

#include "CWorkbook.h"                //管理单个工作表
#include "CWorkbooks.h"         //统管所有的工作簿
#include "CApplication.h"          //Excel应用程序类,管理我们打开的这整个Excel应用
#include "CRange.h"               //区域类,对EXcel的大部分操作都要和这个打招呼
#include "CWorksheet.h"            //工作薄中的单个工作表
#include "CWorksheets.h"            //统管当前工作簿中的所有工作表


编写按钮的响应函数:

	HRESULT hr;     //HRESULT函数返回值
	hr = CoInitialize(NULL);  //CoInitialize用来告诉 Windows以单线程的方式创建com对象
	if (FAILED(hr))
	{
		AfxMessageBox(_T("Failed to call Coinitialize()"));
	}



	CFileDialog  filedlg(TRUE, L"*.xls", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, L"Xls文件 (*.xls)|*.xls");
	filedlg.m_ofn.lpstrTitle = L"打开文件";
	CString strFilePath;
	if (IDOK == filedlg.DoModal())
	{
		strFilePath = filedlg.GetPathName();
	}
	else
	{
		return;
	}

	CApplication app1;
	CWorkbooks books;
	CWorkbook book;
	CWorksheets sheets;
	CWorksheet sheet;
	CRange range;
	CRange iCell;
	LPDISPATCH lpDisp;
	COleVariant vResult;  //COleVariant类是对VARIANT结构的封装
	GetDlgItem(IDC_READ)->EnableWindow(FALSE);
	COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);


	if (!app1.CreateDispatch(_T("Excel.Application"), NULL))
	{
		AfxMessageBox(_T("无法启动Excel服务器!"));
		return;
	}
	books.AttachDispatch(app1.get_Workbooks());
	lpDisp = books.Open(strFilePath, covOptional, covOptional,
		covOptional, covOptional, covOptional, covOptional, covOptional, 
		covOptional, covOptional, covOptional, covOptional, covOptional,
		covOptional, covOptional);


	//得到Workbook    
	book.AttachDispatch(lpDisp);
	//得到Worksheets   
	sheets.AttachDispatch(book.get_Worksheets());
	//sheet = sheets.get_Item(COleVariant((short)1));
	//得到当前活跃sheet 
	//如果有单元格正处于编辑状态中,此操作不能返回,会一直等待 
	lpDisp = book.get_ActiveSheet();
	sheet.AttachDispatch(lpDisp);
	
	//读取第一个单元格的值   
	range.AttachDispatch(sheet.get_Cells());
	range.AttachDispatch(range.get_Item(COleVariant((long)2), COleVariant((long)1)).pdispVal);   //第一变量是行,第二个变量是列,即第二行第一列
	vResult = range.get_Value2();
	CString str;
	if (vResult.vt == VT_BSTR) //字符串  
	{
		str = vResult.bstrVal;
	}
	else if (vResult.vt == VT_R8) //8字节的数字  
	{
		str.Format(_T("%f"), vResult.dblVal);
	}


	// app1.put_Visible(TRUE);
	//app1.put_UserControl(TRUE);
	books.Close();
	app1.Quit(); 
	//释放对象      
	range.ReleaseDispatch();
	sheet.ReleaseDispatch();
	sheets.ReleaseDispatch();
	book.ReleaseDispatch();
	books.ReleaseDispatch();
	app1.ReleaseDispatch();
	//OnOK();  
	MessageBox(str);

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MFC读取Excel(一) 的相关文章

随机推荐

  • 毕业设计-基于深度学习的花卉识别分类

    目录 前言 课题背景和意义 实现技术思路 一 花卉识别相关理论基础 二 基于 ResNeXt 和迁移学习的花卉种类识别 三 基于 EfficientNet 和迁移学习的花卉种类识别 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光
  • scss 中公共变量的导出方法:export

    前言 在使用vue或者react开发项目时都会用到scss 或者less等的扩展语言 那么肯定会有公共变量提取与使用 这篇文章就是记录如何导出公共css变量的 export 关键词 menuText bfcbd9 menuActiveTex
  • React 相关方法(API)介绍-元素与组件操作

    JSX可以减少定义组件的复杂性 但对于React来说JSX并不是必须的 JSX标签最终会被转换为原生的JavaScript 除使用JSX语法外 还可以使用React提供的API来创建组件 本文将介绍使用React创建元素 及一些React中
  • 类与对象基础

    1 面向对象概述 面向过程就是分析出解决问题所需要的步骤 然后用函数把这些步骤一一实现 使用的时候依次调用就可以了 面向对象则是把构成问题的事务按照一定规则划分为多个独立的对象 然后通过调用对象的方法来解决问题 当然 一个应用程序会包含多个
  • JAVA构造方法与static 关键字

    JAVA的构造方法 什么是构造方法 构造方法用来生成一个实例化的对象并对对象实例中的成员变量进行初始化 采用new创建对象时 构造方法被执行 构造方法的方法名必须和类名保持一致 注意 构造方法没有返回值 不可以加void 只能用 publi
  • 设计模式之命令模式

    优质资源分享 学习路线指引 点击解锁 知识定位 人群定位 Python实战微信订餐小程序 进阶级 本课程是python flask 微信小程序的完美结合 从项目搭建到腾讯云部署上线 打造一个全栈订餐系统 Python量化交易实战 入门级 手
  • 【2021应用上架】超详细开发者账号申请&应用上架审核经验整理

    一 准备阶段需要注意的 1 上架前开发者账号申请 申请的主体确定 在公司有多个主体的情况下 用哪个公司主体认证开发者 上架APP时需要考虑到应用相关的各种材料申请在哪个公司名下 材料所属公司主体与开发者账号主体不一致的情况需要开发者花费时间
  • vue节流和防抖

    节流 节流是间隔执行 在定时器到时间后再清空定时器 函数将每个 n 秒执行一次 在内部定义一个定时器和一个开关变量 初始化变量为true 执行定期器前判断变量是否false 就return 为true 如果是继续执行 并且把变量赋值为fal
  • 使用JSON.toJSONString时,出现“$ref”怎么办?服务器返回对象显示$ref怎么解决?

    现象 代码 Map
  • nvm 和 nrm安装使用

    前端工具推荐 nvm Node 版本管理工具 和 nrm 管理npm源 一 nvm 如果直接将 node 安装到电脑上 通常只能安装某个特定的版本 如 v18 12 1 而某些老项目可能只支持老版本的 node 如 v14 19 3 这时候
  • UNIX网络编程卷一 学习笔记 第三十章 客户/服务器程序设计范式

    开发一个Unix服务器程序时 我们本书做过的进程控制 1 迭代服务器 iterative server 它的适用情形极为有限 因为这样的服务器在完成对当前客户的服务前无法处理已等待服务的新客户 2 并发服务器 concurrent serv
  • 解决win10升级到win11,打不开安全中心的问题(亲测有效,已修复)

    相信很多人也碰上过这种问题 升级到了win 11 但是安全中心打不开了 报错 需要使用新应用以打开此windowsdefender链接 但是微软的应用商店并没有这个软件 然后我实验了一种方法 1 去微软的应用商店 Microsoft Sto
  • mysql中如何操作varchar类型的日期进行比较、排序等操作

    在mysql使用过程中 日期一般都是以datetime timestamp等格式进行存储的 但有时会因为特殊的需求或历史原因 日期的存储格式是varchar 那么我们该如何处理这个varchar格式的日期数据呢 使用函数 STR TO DA
  • SSM框架基于JSP犬舍寄养系统

    项目介绍 SSM框架基于JSP犬舍寄养系统的设计与实现 高清视频演示 SSM框架基于JSP犬舍寄养系统的设计与实现 安装视频演示 SSM框架基于JSP犬舍寄养系统的设计与实现 系统说明 1 前台功能模块 首先注册会员 登录进平台 然后选择自
  • 【PyTorch学习】(三)自定义Datasets

    torchvision datasets源码地址 https github com pytorch vision blob master torchvision datasets 前两篇从搭建经典的ResNet DenseNet入手简单的了
  • 【LVGL 学习】样式(style)风格学习

    概述 在 LVGL 中 样式都是以对象的方式存在 一个对象可以描述一种样式 每个控件都可以独立添加样式 创建的样式之间互不影响 可以使用 lv style t 类型创建一个样式并初始化 static lv style t style lv
  • 数据结构算法:写一个递归算法来实现字符串的逆序存放

    题目要求 写一个递归算法来实现字符串的逆序存储 要求不另设存储空间 首先我们定一个一个存放字符串的结构体 typedef struct String ElemType data int length String PString 创建字符串
  • 解决IE浏览器报错,对象不支持“assign”属性或方法

    报错页面 报错代码 解决后 解决代码 function doTest if typeof Object assign function Object assign function target use strict if target n
  • 线性回归分析

    文章目录 一 高尔顿数据集进行线性回归分析 1 1 父母平均身高和儿子身高线性回归分析 1 2 父亲身高和儿子身高线性回归分析 1 3 母亲身高和儿子身高线性回归分析 二 Anscombe四重奏数据集进行线性回归分析 一 高尔顿数据集进行线
  • MFC读取Excel(一)

    软件 vs2013 程序功能 MFC读取Excel里的第一个单元格的值 步骤 第一步 创建基于对话框的MFC工程 第二步 添加库 添加Excel类库 在工程名上右键 选择 添加 类 或者点击菜单栏的 项目 gt 添加类 选择 TypeLib