ODBC导出Excel遇到的表名错误问题解决(excel 2007)

之前在为公司里做数据导出的时候,遇到一个很监介的错误。我一开始以为Excel下面的Sheet1,Sheet2就是相应的表明,所以只是用Selcet * from Sheet1之类的语句。但是在C++的异常中却抛出了一个表名不存在的错误。

后来查了一下,貌似是因为用ODBC的方法必须得每次都重新定义表,而表名不是Sheet1.

转载:vc使用ODBC读excel找不到表的解决办法
    Excel工作簿要通过ODBC进行数据库操作,确实需要一点与其他数据库(例如:ACCESS,FORPRO)不同的设置. 
    因为表名不等于SHEET1,也不等于SHEET2,SHEET3。 
    要访问表 , 必须先定义一个表。 
    方法如下: 
    运行Microsoft Excel 2003, 打开要操作的工作簿, 左键拖拽,选取要定义成为表的区域, 从菜单中选择'插入 '->'名称'->'定义' 
     '定义名称'对话框出现后,键入表的名字, 
     例如:STUDENTS,存盘退出。 
    这样,你就可以在VC中,使用象SELECT * FROM STUDENTS 这样的SQL语句了。试试看
    如果不行,重复上面操作,看看定义表加进入没有

 

但是现在2003已经不常用了,研究了一下2007,把新的位置告诉大家。

运行Microsoft Excel 2007, 打开要操作的工作簿, 左键拖拽,选取要定义成为表的区域, 从菜单中选择'Formulas '->'Define Names 
     '定义名称'对话框出现后,键入表的名字,主要scope一定要选为整个workbook,并且注意一下refer to 看看有没有问题。

 

另外,需要指出的是,从试验结果证明下来,如果excel的一个非头几行(试验下来是前3)的工作格中没有出现超长的数据(一般是多于两个整页面宽度),而在后面的工作咯中却有。那么GetFieldValue有可能会抛出SQL_NO_TOTAL的异常。而这个异常极难处理。我的解决办法是,故意在第一行的长单元格中补充数据,使其变得非常长,这样以后只要修改这一个就ok了。

posted @ 2010-02-17 19:33  aicro  阅读(852)  评论(0编辑  收藏  举报