MFC读取excel数据

MFC读取excel数据CDatabasedatabase; CStringsDriver; CStringsItem1,sItem2; CStringsDsn; CStringsFile=””;//filename CStringsSql; CFileDialogdlg(TRUE,//true为打开,false为创建 “xls”, “FileList”,

大家好,又见面了,我是你们的朋友全栈君。

CDatabase database;  
	CString sDriver;  
	CString sItem1,sItem2;  
	CString sDsn;  
	CString sFile="";//filename  
	CString sSql;  
	CFileDialog dlg( TRUE, //true为打开,false为创建
		"xls", 
		"FileList", 
		OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
		"Excel 文件(*.xls)|*.xls||"//此处只取xls格式
		);
	dlg.m_ofn.lpstrTitle = "导入数据";

	if (dlg.DoModal() != IDOK)
		return;
	//获得文件路径名
	sFile = dlg.GetPathName();
	//判断文件是否已经存在,存在则打开文件
	DWORD dwRe = GetFileAttributes(sFile);
	if ( dwRe != (DWORD)-1 )
	{ 
	}
	else return;
	//check driver  
	//sDriver=GetExcelDriver();  
	sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)";
	
	sDsn.Format("ODBC;DRIVER={%s};DSN='''';DBQ=%s",sDriver,sFile);  

	TRY  
	{  
		//open db  
		database.Open(NULL,false,false,sDsn);  

		CRecordset recset(&database);  
		//read sql   
		sSql="SELECT con1,con2 FROM [Sheet1$]";  
		recset.Open(CRecordset::forwardOnly,sSql,CRecordset::readOnly);  

		//get query results  
		while(!recset.IsEOF())  
		{  
			//read inside value  
			recset.GetFieldValue("con1",sItem1);  
			recset.GetFieldValue("con2",sItem2);  
			//此处读取到的数据处理
			recset.MoveNext();  
		}  

		//close db  
		database.Close();  

	}  
	CATCH (CDBException,e)  
	{  
		//db exception occur  
		AfxMessageBox("db error: "+e->m_strError);  
	}  
	END_CATCH;

代码网上大同小异,注意以下几点就好了:

1、需要有 MICROSOFT EXCEL DRIVER (*.XLS) 驱动支持(一般都会有,没有的百度安装即可)

2、通过ODBC写再读基本没问题,但是直接读取很多人会遇到”microsoft jet 数据库引擎找不到对象…”的错误,注意下面即可

3、上例中的con1,con2为excel表中的列名,Sheet1为excel中表名,而不是文件名,切记!

4、注意添加头文件#include <afxdb.h>

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python 数据合并函数merge( )[通俗易懂]

    python 数据合并函数merge( )[通俗易懂]python中的merge函数与sql中的join用法非常类似,以下是merge()函数中的参数:merge(left,right,how=’inner’,on=None,left_on=None,right_on=None,left_index=False,right_index=False,sort=False,suffixes=(‘_x’,’_y’),cop…

    2022年4月28日
    550
  • vggnet pytorch_Javaweb项目

    vggnet pytorch_Javaweb项目VGG网络是在2014年由牛津大学著名研究组VGG(VisualGeometryGroup)提出。

    2025年7月25日
    2
  • django和drf_jackson序列化原理

    django和drf_jackson序列化原理前言上一篇文章我们讲述了序列化,这篇就带大家一起来实现以下序列化Serializer我们使用序列化类Serializer,我们来看下源码结构,这里推荐使用pycharm左边导航栏的Structu

    2022年8月7日
    11
  • Server.MapPath()用法[通俗易懂]

    Server.MapPath()用法[通俗易懂]Server.MapPath(stringpath)作用是返回与Web服务器上的指定虚拟路径相对应的物理文件路径。其参数path为Web服务器的虚拟路径,返回结果是与path相对应的物理文件路径。但有时参数并非为虚拟路径,而是用户自定义的文件名。  Server.MapPath()的全名是System.Web.HttpContext.Current.Server.MapPath()。有

    2022年7月15日
    18
  • Python怎么取整(Python程序打包)

    Python取整方式:背景在处理数据的时候,碰到了一个问题,就是取整方式!比如给定一个数值型列表,我需要分别获取它位置为长度的0%,25%,50%,75%,100%处的几个数字。但Python自带的int是向下取整,如果数字长度是5,理论上这五个数字分别对应0%,25%,50%,75%,100%的位置,但使用int,结果却并不是入次。比如当5*0.75时,如果加上int(5*0.7

    2022年4月16日
    58
  • 论手机网站(wap)网页广告防屏蔽的方法

    论手机网站(wap)网页广告防屏蔽的方法智能手机的崛起,让现在的网站越来越重视移动端,随之而来的广告形式也越来越向移动端倾斜侧重;但是本君发现一个现象,现在各大手机浏览器厂商对移动端广告过滤越来越严格,几乎只要开启过滤,大部分广告是要被过滤的;所以现在的广告商开始研究如何避免被过滤呢?我的观点是,只要浏览器商家想过滤,可以做到100%过滤的,您想再多的招也是没用的!WHY?因为广告脚本一般是作为客户端表现,是要经过浏览器解析后才显示…

    2022年7月12日
    46

发表回复

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

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