Delphi - 通过ADO查询获取Excel行

时间:2011-03-31 09:56:43

标签: delphi excel ado

我有以下excel文件

enter image description here

我将AdoConnection.ConnectionString设置为

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

其中aFileName是excel文件名。

之后,使用ADOQuery组件(连接设置为AdoConnection),我执行'select * from [Sheet1 $]'。

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

你有什么想法吗?

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

3 个答案:

答案 0 :(得分:2)

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

解决方案是使用导入模式(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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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