我想通过使用TADOConnection
和TADOTable
从Excel文件(xls)导入一些数据。使用ADO和Delphi从XLS文件导入数据
我连接到没有问题的文件,但是当我打开TADOTable
某些字段有ftFloat
数据类型,因为它们在excel文件中的值是数字,但它们的值不是数字!
我希望TADOTable
(Excel文件的列)的所有字段具有ftString
数据类型。
我将Excel文件中的柱的类型设置为Text
,但没有更改受影响!
我该怎么做?
我想通过使用TADOConnection
和TADOTable
从Excel文件(xls)导入一些数据。使用ADO和Delphi从XLS文件导入数据
我连接到没有问题的文件,但是当我打开TADOTable
某些字段有ftFloat
数据类型,因为它们在excel文件中的值是数字,但它们的值不是数字!
我希望TADOTable
(Excel文件的列)的所有字段具有ftString
数据类型。
我将Excel文件中的柱的类型设置为Text
,但没有更改受影响!
我该怎么做?
我猜你有大多数列可能看起来像数字,但也有一些是纯文本。
ADO
导入Excel时有效忽略column type
。相反,它会猜测列类型,如本MSDN link说:
有关混合数据类型
注意如前所述,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";
设置IMEX 1使得ADO对待所有列文本,在下列规定ConnectionStrings page:
使用这一个[IMEX = 1]当你想将这个文件看作文本, 覆盖擅长于数据列类型为“General”,以猜测列中的数据类型为 。
您可以在此SO question找到更多关于IMEX物业的信息。
更新:使用它检索的字段数据类型将是ftWideString
。
谢谢,如果我使用IMEX,那么我无法在excel列中写入数据! –
“,但为少数数据类型返回NULL(空)值”谁设计了这个sh * t?只丢掉用户数据是因为它不会做出关于数据类型的最小公分母(文本)的明智决定。 –
@Mahmood_M,请您详细说明不能在excel列中写入数据吗?顺便说一句,我忘了提到的数据类型是'ftWideString'。现在添加它。 –