使用ADO和Delphi从XLS文件导入数据

时间:2014-01-16 05:44:54

标签: excel delphi ado delphi-2010

我想使用TADOConnectionTADOTable从Excel文件(xls)导入一些数据。

我连接到文件没有问题,但是当我打开TADOTable时,某些字段有ftFloat数据类型,因为它们在excel文件中的值是数字,但它们的值不是数字!

我希望TADOTable(Excel文件列)的所有字段都具有ftString数据类型。

我将Excel文件中的columms类型设置为Text,但没有受到影响!

我该怎么做?

1 个答案:

答案 0 :(得分:10)

我猜你有大多数列似乎是数字的,但也有些是纯文本。

ADO在导入Excel时有效忽略column type。相反,它会猜测列类型,如MSDN link中所述:

  

关于混合数据类型的警告

     

如前所述,ADO必须猜测每列的数据类型   在Excel工作表或范围中。 (这是受Excel单元格影响   格式化设置。)如果您有数字,可能会出现严重问题   值与同一列中的文本值混合。 Jet和the   ODBC Provider返回多数类型的数据,但返回NULL   少数据数据类型的(空)值。如果这两种类型   同样在列中混合,提供者选择数字而不是文本。

所有字段加载为字符串的一种方法是使用IMEX extended property中的connection string,如下所示:

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcel2007file.xlsx;
Extended Properties="Excel 12.0 Xml;HDR=YES;IMEX=1";

将IMEX设置为1会使ADO将所有列视为文本,如以下ConnectionStrings page中所述:

  

如果要将文件中的所有数据视为文本,请使用此[IMEX = 1],   重写Excel列类型“常规”以猜测数据类型   在专栏中。

您可以在此SO question中找到有关IMEX属性的更多信息。

更新:使用此检索的字段数据类型为ftWideString