使用ODBC读取Excel表格出现错误

NAME15122 2012-10-21 07:41:31
我在网上看到的用VC对EXCEL表的操作,他先是自己创建了一个EXCEL,然后再对其进行读取,可以操作成功.但是我自己新建一个Excel表 credit.xls,进行读取,将程序中的文件名,表名,都改为如下,编译通过但是读取时老是出现Microsoft Jet数据库引擎找不到对象 "credit ",请确定对象是否存在,并正确地写出了它的名称和路径!
这个错误总是不能解决,请各位大侠帮我看看,非常感谢!
void CQueryView::ReadExcel()
{
CDatabase database;
CString sSql;
CString sItem1, sItem2;
CString sDriver;
CString sDsn;
CString sFile = "C:\\credit.xls ";// 将被读取的Excel文件名

// 检索是否安装有Excel驱动 "Microsoft Excel Driver (*.xls) "
sDriver = GetExcelDriver();
if (sDriver.IsEmpty())
{
// 没有发现Excel驱动
AfxMessageBox( "没有安装Excel驱动! ");
return;
}
// 创建进行存取的字符串
sDsn.Format( "ODBC;DRIVER={%s};DSN= ' ';DBQ=%s ",sDriver,sFile);
TRY
{
// 打开数据库(既Excel文件)
database.Open(NULL, false, false, sDsn);
CRecordset recset(&database);
// 设置读取的查询语句
sSql = "SELECT * FROM credit ";

//执行查询语句
recset.Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly);

// 获取查询结果
while (!recset.IsEOF())
{
//读取Excel内部数值
recset.GetFieldValue( "Name ", sItem1);
recset.GetFieldValue( "Age ", sItem2);

CString strMsg;
strMsg.Format( "Name:%s,Age:%s ",sItem1,sItem2);
AfxMessageBox(strMsg);
// 移到下一行
recset.MoveNext();
}
// 关闭数据库
database.Close();
}
CATCH(CDBException, e)
{
// 数据库操作产生异常时...
AfxMessageBox( "数据库错误: " + e-> m_strError);
}
END_CATCH;
}
...全文
978 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
WELOVE20101 2014-05-29
  • 打赏
  • 举报
回复
// 设置读取的查询语句 sSql = "SELECT * FROM credit "; 把上面这语句改为: sSql = "SELECT * FROM [credit$] ";
netimmortal 2014-04-25
  • 打赏
  • 举报
回复
单元格格式要是文本,表名在SQL语句中最好加上后缀sheet1$这样就不会错了。
njwtkj 2013-08-21
  • 打赏
  • 举报
回复
你好,想问一下void CQueryView::ReadExcel()放在哪个文件夹下?包含该类的头文件是什么?
WSG121212 2013-08-15
  • 打赏
  • 举报
回复
不知道你们说什么,这个和excel版本怎么可能有关系?
wzhihew 2013-04-06
  • 打赏
  • 举报
回复
我也在使用这段代码,但运行到//读取Excel内部数值 recset.GetFieldValue( "Name ", sItem1); 时,总是抛出异常,你知道怎回事吗
sumos 2012-10-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
路径和表名都对,我找到原因了,我用的是Excel2007,改成Excel2003的表就可以了。谢谢你了
[/Quote]
提醒楼主结贴!
我以前也遇到过类似的问题:用ODBC读取mdb(Access 2003)是没有问题的,后来把mdb改为accdb(Access 2007),就一直有问题。开始还以为ODBC不支持07,后来才发现,连接字符串中Jet引擎的版本号不能再用03的,要改用07的才行。
NAME15122 2012-10-22
  • 打赏
  • 举报
回复
路径和表名都对,我找到原因了,我用的是Excel2007,改成Excel2003的表就可以了。谢谢你了
tcbo 2012-10-21
  • 打赏
  • 举报
回复
CString sFile = "C:\\credit.xls ";// 将被读取的Excel文件名
看看你文件存在吗?文件名称对吗?

Sql = "SELECT * FROM credit "; 这个里面的credit 有这个表? Sheet名称?

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧