Delphi – Excel行通过ADO Query获取

我有以下的Excel文件

在这里输入图像说明

我将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中所有字段的types都是WideString。 查询中只显示最后2列中的值为“绿色标志”的行。 我不是Excel中的天才,但查询不应该获取表单中存在的所有数据?

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

解决scheme是使用导入模式(IMEX = 1)。 请注意,如果你也试图更新行,这有奇怪的behvaiour。

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

PRB:Excel值返回为NULL使用DAO OpenRecordset

想到的一点是,隐藏的行中有一行或多行在任何单元中都没有值。 Excel通常将第一个完全空行和列作为数据范围的界限。 在这种情况下的数据范围不是“只有和OL”的数据范围,而是一组Excel和Excel作为表对待的行和列。 这是你通过Ado访问工作表所做的。

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