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$]";//注意最后的表名使用方法
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • kafka重复消费解决方案_kafka重复消费原因

    kafka重复消费解决方案_kafka重复消费原因前面博客小编向大家分享了kafka如何保证消息不丢失?,基本是从producer和broker来分析的,producer要支持重试和acks,producer要做好副本和及时刷盘落地。这篇博客呢,就跟大家一起聊一下kafka消费者如何消费的?如何避免重复消费?消费流程:一般我们消费测试是不会变的,都使用默认的,也就是第一种,range策略。默认策略,保证基本是均衡的。计算公式:n=分区数/消费者数m=分区数%消费者数前m个消费者,消费n+1个,剩余的消费n个eg:12个par

    2022年10月10日
  • 我的手机软件

    我的手机软件总结一下现在我装的软件,这些我都有安装版,兄弟们可以复用:)我的手机:Nokia6680操作系统:Symbian60Ⅲ目前手机上装的:6630EditableQuickOffice2.sisoffice套件,实际用的很少。6681字典字库.SIS字典,有用。ACM超级来电管家来电管家,当然有用啦,防火墙,自动短信回复…

  • 探索SQL Server元数据(一)

    探索SQL Server元数据(一)

    2021年11月28日
  • 国外LOGO设计欣赏的200佳网站推荐(系列十五)

    国外LOGO设计欣赏的200佳网站推荐(系列十五)这个系列将向大家分享国外精美Logo设计欣赏的200佳网站,设计师们可通过这些网站收集的优秀Logo作品来获取灵感,进而设计出更加时尚、更有创意的作品,设计师们也可以把自己得意的Logo作品提交到这些

  • 在Ubuntu中安装pycharm社区版[通俗易懂]

    在Ubuntu中安装pycharm社区版[通俗易懂]版本Ubuntu20LTS

  • NTP协议介绍

    NTP协议介绍查看原作者:转载自:NTP协议介绍(2013-06-1914:50:50)转载▼SNTP协议原理SNTP是简单网络时间协议(SimpleNetworkTimeprotocol)的简称,它是目前Internet网上实现时间同步的一种重要工程化方法。本文对SNTP协议的工作原理、工作模式、时间戳格式、信息帧格式进行了研究,最后对SNTP协议的应用提出一些有益的建议。关键词:SNTP;时间同步;时间戳格式;报文格式TitleAnalysisforSNTPprotocolAbstrac

    2022年10月12日

发表回复

您的电子邮箱地址不会被公开。

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