问题现象:
   1个xls文件,是程序从表格导出的,具体什么东西里面导出未知
用ado链接这个xls文件,报“外部表不是预期的格式” 的错误,
但是如果用Excel.exe打开这个xls文件,不做任何操作,再用ado链接,就没有问题另外,我试过用Excel程序打开,然后做了修改(有极端修改,全部删除,然后手动添加一行),再保存,还是不行但是很奇怪,只要这个xls文件打开着就没有问题。有人碰到过这个问题吗?
希望提供线索,

解决方案 »

  1.   

    在DELPHI中使用ADO直接访问Excel数据文件 要用DELPHI中的ADO系列控件访问Excel数据文件,首先应该建立一些基本概念。你需要将一个Excel数据文件想 
    象为一个关系数据库,Excel文件中的每个工作表就对应该数据库中的一个表,而工作表中的每一列当然就是表 
    的列了。然后,按照下列面的秘诀进行就可以。 1.设置ADOConnection的ConnectionString 
    构造ConnectionString时,OLE DB的提供者要选择Microsoft Jet 4.0 OLE DB Provider作为ADO的驱动程序。 
    这本来是用于连接Access数据库的驱动程序,但也可打开Excel文件。 
    连接的数据库名称当然就是你要打开的Excel文件,注意扩展名是*.xls,而不是*.mdb。 
    最关键的一点是,还要设置扩展属性Extended Properties为“Excel 8.0”,否则,测试连接时会报告无法 
    识别数据格式的错误。Extended Properties的属性值在“所有”参数页中输入。 
    最后,设置完成后的ConnectionString中的各项参数为: 
    Provider=Microsoft.Jet.OLEDB.4.0 
    Data Source=MyExcelFile.xls 
    Extended Properties=Excel 8.0 
    Persist Security Info=False 2.设置ADODataSet或ADOTable 
    将ADODataSet或ADOTable连接到刚才的ADOConnection。如果不用ADOConnection,也可以参照上面的方法 
    直接设置ADODataSet或ADOTable的ConnectionString属性。对于ADODataSet,需要将CommandType属性设置 
    为cmdTableDirect,而对于ADOTable,则将TableDirect属性设置为True。因为,访问Excel文件是直接的 
    数据文件访问,不是通过SQL语句来操作游标访问的。如果不设置直接访问,则系统会报告SQL语句格式错 
    误等信息。 
    然后,当你下拉ADODataSet中的CommandText属性或ADOTable的TableName属性时,就可以选择到要打开的工 
    作表了。注意,表名后面多了加一个$符号。 3.打开ADODataSet或ADOTable 
      

  2.   

    to 楼上这些都是普通的Excel ado链接方法,如果是正常的xls文件,是没有问题的。报错的xls文件是从一个应用程序导出的,可能有些格式不对。
      

  3.   

    这样子,你建一个正常的EXECL文档,把导出的EXCEL内容复制到正常那个EXECL试试。来判断是不是EXECL内容的问题。
      

  4.   

    估计是一些计算字段或者日期格式引起
    如果实在不行,就在读入前程序打开excel,读入后在关闭excel
      

  5.   

    to 3楼我试过,这样是没有问题的。to 4楼我现在的程序就是这样处理的,但是这样有点影响效率。我把xls文件里的内容全部都删除了,然后加了1个单元格的值,内容就是字符a还是报同样的错误。期待高手