概述
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$]";//注意最后的表名使用方法
最后
以上就是明亮金毛为你收集整理的MFC读取excel数据的全部内容,希望文章能够帮你解决MFC读取excel数据所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复