2014-01-16 141 views
3

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

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

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

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

我该怎么做?

回答

10

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

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

有关混合数据类型

注意如前所述,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"; 

设置IMEX 1使得ADO对待所有列文本,在下列规定ConnectionStrings page

使用这一个[IMEX = 1]当你想将这个文件看作文本, 覆盖擅长于数据列类型为“General”,以猜测列中的数据类型为 。

您可以在此SO question找到更多关于IMEX物业的信息。

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

+0

谢谢,如果我使用IMEX,那么我无法在excel列中写入数据! –

+0

“,但为少数数据类型返回NULL(空)值”谁设计了这个sh * t?只丢掉用户数据是因为它不会做出关于数据类型的最小公分母(文本)的明智决定。 –

+0

@Mahmood_M,请您详细说明不能在excel列中写入数据吗?顺便说一句,我忘了提到的数据类型是'ftWideString'。现在添加它。 –