首页  编辑  

在DELPHI中使用ADO直接访问Excel数据文件

Tags: /超级猛料/Database.数据库相关/ODBC、ADO、Access/   Date Created:

在DELPHI中使用ADO直接访问Excel数据文件

关键字: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

将Excel的数据转入其他数据库的关键在于用数据库的方法打开Excel表。从Excel表的一般布局来看,分为简单表和复杂表。我们对简单表的定义是表的第一排数据是字段名,如果表的第一排字段名,则称为复杂表。

对于简单表,可以直接用数据库的方式打开,但对于复杂表,首先要对Excel表的数据区进行定义,可以用定义打印区域的方法,也可以用定义或指定的方法。用定义的方法比较方便,可以为Excel每个表的数据区定义并命名,这个命名就是将来用数据库方式打开Excel表的表名。对于简单表,Excel每个表的名称就是表名。有一点需要注意,在用数据库方式打开Excel表时会自动为每个表名加上"$",如Excel的某个表名为Sheet1,那么他在数据库中的表名是"Sheet1$"。可以用BDE来操作,也可以用ADO。使用ADO时还有一点要注意,Excel的表名要加方括号[Sheet1$],例如在ADODataSet中需要这样来写:

   ADODataSet.CommandText := 'SELECT * FROM [Sheet1$]';

// 使用ADO的例子:

  with ADODataSet1 do

  begin

   ConnectionString := 'Provider=MSDASQL.1;' +

    'Persist Security Info=False;' +

    'Data Source=' + ExcelFileName;

   CommandType := cmdText;

   CommandText := 'SELECT * FROM [Sheet1$]';

   Active := True;

  end;