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

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

我连接到没有问题的文件,但是当我打开TADOTable一些字段有ftFloat数据types,因为它们在Excel文件中的值是数字,但它们的值不是一个数字!

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

我在Excel文件中将Text的types设置为Text但没有任何更改受到影响!

我怎样才能做到这一点?

我猜你有大部分可能看起来是数字的列,但也有一些是纯文本。

导入Excel时, ADO有效地忽略column type 。 相反,它猜测列types,正如在MSDN链接中所述 :

关于混合数据types的注意事项

如前所述,ADO必须猜测Excel工作表或范围中每列的数据types。 (这不受Excel单元格格式设置的影响。)如果在同一列中将数值与文本值混合,则会出现严重问题。 Jet和ODBC提供程序都返回多数types的数据,但为less数数据types返回NULL(空)值。 如果这两种types在列中均匀混合,提供者将在文本上select数字。

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

 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页所述 :

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

你可以在这个SO问题中find更多关于IMEX属性的信息。

更新 :使用它检索的字段数据types将是ftWideString