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 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";
Run Code Online (Sandbox Code Playgroud)
将IMEX设置为1会使ADO将所有列视为文本,如以下ConnectionStrings页面中所述:
如果要将文件中的所有数据视为文本,请使用此[IMEX = 1],覆盖Excel列类型"常规"以猜测列中的数据类型.
您可以在此SO问题中找到有关IMEX属性的更多信息.
更新:使用此检索的字段数据类型ftWideString.