java excel odbc_ODBC方式读写EXCEL文件

这种方法的好处是以数据库的方式读取文件而不需要打开EXCEL文件,节省资源

第一步:在stdafx.h中添加头文件

#include

#include

第二步:测试Excel驱动是否安装,

CString

CHomisProView::GetExcelDriver()

{

char szBuf[2001];

WORD cbBufMax = 2000;

WORD cbBufOut;

char *pszBuf = szBuf;

CString sDriver;

//

获取已安装驱动的名称(涵数在odbcinst.h里)

if

(!SQLGetInstalledDrivers(szBuf, cbBufMax,

&cbBufOut))

return "";

// 检索已安装的驱动是否有Excel...

do

{

if (strstr(pszBuf, "Excel") != 0)

{

//发现 !

sDriver =

CString(pszBuf);

break;

}

pszBuf = strchr(pszBuf,'\0')+1;

}

while (pszBuf[1] !=

'\0');

return sDriver;

}

第三步:建立连接,打开文件

CString sFile =

"C:\\默认参数读取.xls"; // 将被读取的Excel文件名

sDriver =

GetExcelDriver();

if (sDriver.IsEmpty())

{

//

没有发现Excel驱动

AfxMessageBox("没有安装Excel驱动!");

return;

}

// 创建进行存取的字符串

sDsn.Format("ODBC;DRIVER={%s};DSN='';DBQ=%s",

sDriver, sFile);

// 打开数据库(既Excel文件)

database.Open(NULL, false, false,

sDsn);

CRecordset

recset(&database);//绑定数据文件

sSql.Format("SELECT  *  from

[%s$]

",stringName);//$符号表示文件中限定的某个表文件

// 执行查询语句

recset.Open(CRecordset::forwardOnly, sSql,

CRecordset::readOnly);

//读取Excel内部数值

recset.GetFieldValue("序号",strContents);

第四步:关闭记录集和数据集

recset.Close();//关闭记录集,因为循环的时候下次还要打开

//

关闭数据库

database.Close();

今天遇到了个问题,在本人机子上编译调试好的程序竟然在别的机子上运行不了,提示Miscrosoft Jet数据库找不到Dbase数据表对象,明明数据表已经存在了,难道是ODBC程序的问题,于是在网上寻找许久,终于找到了解决方法。

问题的根本原因是:dbf遵循早期的8.3文件名格式,对于文件名超过8个字符(注意,是八个字符)的文件读取不正常。

解决方法:

1. 重新命名文件名,使其少于8个字符

2. MDAC 2.1 (or greater) requires the Borland Database Engine (BDE)

to update dBase DBF files. 所以可以选择安装BDE

3. 不再使用通常的Microsoft dBase

Driver (*.dbf) ODBC驱动,换用 Microsoft FoxPro

VFP Driver(*.dbf)ODBC驱动

前两种,经测试成功,后一种本想测试下,才发现没安装相应的VFP驱动,所以就暂时没测试。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值