【问题标题】:Importing data from an XLS File using ADO and Delphi使用 ADO 和 Delphi 从 XLS 文件导入数据
【发布时间】:2014-01-16 05:44:54
【问题描述】:

我想使用 TADOConnectionTADOTable 从 Excel 文件 ( xls ) 中导入一些数据。

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

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

我将 Excel 文件中的列类型设置为 Text,但不影响任何更改!

我该怎么做?

【问题讨论】:

    标签: excel delphi ado delphi-2010


    【解决方案1】:

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

    ADO 在导入 Excel 时有效地忽略了column type。相反,它会猜测列类型,如MSDN link 中所述:

    关于混合数据类型的注意事项

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

    所有字段加载为字符串的一种方法是在connection string 中使用IMEX extended property,如下所示:

    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], 覆盖 Excels 列类型“常规”以猜测是什么类型的数据 在列中。

    您可以在此SO question 中找到有关 IMEX 属性的更多信息。

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

    【讨论】:

    • 谢谢,如果我使用 IMEX,那么我无法在 excel 列中写入数据!;
    • “但为少数数据类型返回 NULL(空)值” 谁设计了这个 sh*t???只是丢弃用户数据,因为它不会做出明智的决定,即采用关于数据类型的最低公分母(文本)。
    • @Mahmood_M,您能否详细说明无法在 excel 列中写入数据?顺便说一句,我忘了提到字段数据类型是ftWideString。立即添加。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多