利用ODBC管理excel文件

前几天接到导师的要求,将一个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.csdn.net/detail/shaellancelot/6759049

你可能感兴趣的:(C/C++)