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

G3n*_*Man 3 delphi excel ado delphi-2010

我想通过使用TADOConnection和从Excel文件(xls)导入一些数据TADOTable.

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

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

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

我怎样才能做到这一点?

Gui*_*ens 10

我猜你有大多数列可能看起来像数字,但也有些是纯文本.

ADOcolumn type导入Excel时有效忽略.相反,它会猜测列类型,如此MSDN链接中所述:

关于混合数据类型的警示

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

加载一个方法的所有字段的字符串是使用IMEX extended propertyconnection string类似以下内容:

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcel2007file.xlsx;
Extended Properties="Excel 12.0 Xml;HDR=YES;IMEX=1";
Run Code Online (Sandbox Code Playgroud)

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

如果要将文件中的所有数据视为文本,请使用此[IMEX = 1],覆盖Excel列类型"常规"以猜测列中的数据类型.

您可以在此SO问题中找到有关IMEX属性的更多信息.

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