【问题标题】:Delphi - Excel rows get by an ADO QueryDelphi - 通过 ADO 查询获取 Excel 行
【发布时间】:2011-03-31 20:58:08
【问题描述】:

我有以下excel文件

我将 AdoConnection.ConnectionString 设置为

 AdoConnection.ConnectionString :=' Provider=Microsoft.Jet.OLEDB.4.0;' +
           'Data Source=' +aFileName + ';' +
           'Extended Properties=Excel 8.0;';

其中 aFileName 是 Excel 文件名。

之后,使用 ADOQuery 组件(连接设置为 AdoConnection)我执行“从 [Sheet1$] 中选择 *”。

问题是查询结果中没有第16802行和第17179行,我不知道为什么。工作表中的所有字段都设置为常规。我正在使用 Delphi 7。

你有什么想法吗?

LE:AdoQuery 中所有字段的类型都是 WideString。在查询中仅存在最后 ​​2 列中的值具有“绿色符号”的行。我不是 Excel 天才,但查询不应该获取工作表中存在的所有数据?

【问题讨论】:

  • 为什么这行不同对齐?
  • @Neftalí 我猜他们有不同的数据类型。
  • @Roman_Yankovsky - 是的,我也这么认为,但我肯定知道。这可能是查询无法识别数据的原因。

标签: delphi excel ado


【解决方案1】:

默认情况下,它会检查前几行并使用它来确定列类型。当它选择的类型是文本时,该列中的所有数值都将显示为空。

解决方法是使用导入模式(IMEX=1)。请注意,如果您还尝试更新行,这会产生奇怪的行为。

 AdoConnection.ConnectionString :=' Provider=Microsoft.Jet.OLEDB.4.0;' +
       'Data Source=' +aFileName + ';' +
       'Extended Properties="Excel 8.0;IMEX=1"';

PRB: Excel Values Returned as NULL Using DAO OpenRecordset

【讨论】:

  • PRB:使用 DAO OpenRecordset 将 Excel 值返回为 NULL - 这就是答案。
【解决方案2】:

想到的一件事是,在隐藏的行中,有一行或多行在任何单元格中都没有值。 Excel 通常将第一个完全空的行和列作为数据范围的边界。在这种情况下,数据范围不是“just and ol”数据范围,而是 Excel 将其视为表格的一组行和列。您可以通过 Ado 访问工作表来执行此操作。

【讨论】:

  • 谢谢 Marjan,但问题是我只进入查询中最后两列的单元格带有“绿色”警报的行...
  • 然后检查绿色警报的内容。这至少可以给你一个提示。如果它类似于“功能与此区域中的其他单元格不同”,可能仍指示该区域中的完全空行......
【解决方案3】:

第 2 行在 col D 和 E 中有一些数字字段,您应该将此值更改为字符串, 您可以将单元格类型更改为文本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多