2014-01-16 140 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'。現在添加它。 –