大家好,又见面了,我是你们的朋友全栈君。
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账号...