OLEDB 未在 Windows 10 和 Microsoft Office 2013 下从 XLSX 读取所有行

Posted

技术标签:

【中文标题】OLEDB 未在 Windows 10 和 Microsoft Office 2013 下从 XLSX 读取所有行【英文标题】:OLEDB not reading all rows from XLSX under Windows 10 and Microsoft office 2013 【发布时间】:2018-04-05 09:08:40 【问题描述】:

我有 243k 行的 XLSX 文件。

相同的程序在不同的计算机上给出不同的结果。

如果我在 Windows 8.1 + Office 2010 上打开它,程序会读取所有 243k 行并且一切正常。

在 Windows 10+Office 2013 下,它只读取前 237k 行,截断最后 6k 行。

我正在使用 Delphi,带有以下连接字符串

ADOConnection1.ConnectionString:='Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\File.xlsx;Extended Properties="Excel 12.0;HDR=NO;IMEX=1"';
ADOQuery1.SQL.Text:='SELECT * FROM Sheet1$'
ADOQuery1.Open;
ShowMessage(ADOQuery1.RecordCount.ToString);

【问题讨论】:

【参考方案1】:

问题出在表索引上,我有点搞砸了代码。 查询文本从表列表中获取第一个表名而不是常量。

ADOQuery1.SQL.Text:='SELECT * FROM' 但是,表索引因版本而异。 所以选择来自不同的表

Windows 8.1+Office2010表格列表:

_xlnm#_FilterDatabase
_xlnm#Database
_xlnm#Print_Area
Instruction$
CATALOG$

Windows 10+Office2013表格列表

_xlnm#Database
Instruction$
Instruction$_xlnm#Print_Area
CATALOG$
CATALOG$_xlnm#_FilterDatabase

但如果我在 Excel 中打开文件,则只有 2 张名为:“Instruction”和“Catalog”的工作表。

我不知道这 237k 行是从哪里来的。

【讨论】:

以上是关于OLEDB 未在 Windows 10 和 Microsoft Office 2013 下从 XLSX 读取所有行的主要内容,如果未能解决你的问题,请参考以下文章

Windows Azure 远程站点“Microsoft.ACE.OLEDB.12.0”提供程序未在本地计算机上注册 [重复]

Microsoft ACE OLEDB 12.0 未在本地计算机上注册 - 但它是

Microsoft.Jet.OLEDB.4.0' 提供程序未在本地计算机上注册

win10:未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序

(win10 64位)未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序

未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序