利用ODBC管理excel文件

本文详细介绍了如何使用ODBC技术解决Excel数据导入与导出问题,包括常见Bug分析与解决方案,以及实现过程中遇到的文件读写限制的巧妙解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前几天接到导师的要求,将一个excel里面所有的空数据修改成特定字符串。要求不能使用com技术,而是用ODBC。

于是,在网上收了一下,基本都和下面这个链接里面的代码相同。

http://hi.baidu.com/wpd1hl/item/fa2a9ee4d7f832adce2d4fd7

这段代码确实有三个函数GetExcelDriver,ReadFromExcel和WriteToExcel。三个函数的作用可以很容易的根据名字来知道。

ReadFromExcel有一个很明显的bug,那就是只能打开WriteToExcel函数所创建的excel文件,而无法读取其他excel文件(自己新建的文件)。

于是,笔者做了许多比较。发现:

1.WriteToExcel在要打开的文件不存在时,会创建同名文件;

2.WriteToExcel在要打开的文件存在时,会在excel文件中新建一个sheet(表),并写入数据;

3.ReadFromExcel只能打开由WriteToExcel创建的文件;

4.修改WriteToExcel创建的文件的内容之后,ReadFromExcel依然可以读取文件。

ReadFromExcel打不开文件时,经常回输出一下内容:

Microsoft jet 数据库引擎无法打开对象 **。。。。。

所以,我以为是excel的版本过新照成的,但是下载了office 2003之后,错误依在。

!!!最终,笔者终于找到了问题的所在:

// 设置读取的查询语句,查询表m_sheetName内的所有列
        sSql = "SELECT * "       
               "FROM [" + m_sheetName + "$] ";
        // 执行查询语句
        recset.Open(CRecordset::snapshot, sSql, CRecordset::none);
在SQL语句SELECT  “*” FROM  “*”, FROM后面的sheet(表)名称应该是“[sheetname$]”这样的格式才行,否则就会出现以上的问题。


ps:在实现修改excel的程序时,我也遇到了一个问题就是文件似乎只能只读而不能修改,即“ODBC driver不支持CRecordset::dynaset”。笔者通过了一个很取巧的方法最终实现了程序。具体可以参见我的源码,http://download.youkuaiyun.com/detail/shaellancelot/6759049

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值