ACE oleDb 驱动程序无法处理巨大的 excel 文件

Posted

技术标签:

【中文标题】ACE oleDb 驱动程序无法处理巨大的 excel 文件【英文标题】:ACE oleDb drivers unable to handle huge excel files 【发布时间】:2011-06-26 18:50:14 【问题描述】:

ACE OLEDB 驱动程序是否存在较大文件的已知问题? 我正在使用以下代码检索 400Mb xls 文件中的工作表

public string[] GetWorkSheets()

    var connectionString  = "Provider=Microsoft.ACE.OleDb.12.0; data source=c:\filepath\filename.xls; Extended Properties=\"Excel 8.0;IMEX=1;HDR=YES;\"";
    DataTable dataTable;
    using (OleDbConnection connection = new OleDbConnection(connectionString))
    
        connection.Open();//Exception thrown here for large files
        dataTable = connection.GetSchema("Tables");
    

    int lenght = dataTable.Rows.Count;
    string[] worksheets = new string[lenght];
    for (int i = 0; i < lenght; i++)
    
        worksheets[i] = dataTable.Rows[i]["TABLE_NAME"].ToString();
    
    return worksheets;

我收到 OleDbException 消息系统资源超出。我没有在循环中调用这个函数,也没有在到达这里之前打开任何其他连接。此代码非常适用于较小的文件。

我的系统有 4Gb RAM。在 Windows 7 64Bit 上运行。 Ace 驱动程序也是 64 位的。

知道可以做些什么来解决这个问题吗?

【问题讨论】:

有些奇怪 - 我创建了一个大型 Excel 文件,关闭文件后出现上述错误,但打开文件后,代码运行没有错误。我用的电脑内存确实很小,打开文件后代码跑得很快。 @Remou:延迟加载/延迟刷新的情况可能吗? 如果您尝试复制..让我知道您需要代码的哪一部分... 我已经搞砸了很多,我可以让它工作的唯一方法是导入 Access (Jet) 并引用该文件。请注意,在我打开大 Excel 文件之前,导入不起作用。越来越好奇。 【参考方案1】:

您使用的是 ACE,所以我认为它是 32 位平台。 WIN2K3?

您是否尝试过在 boot.ini 中使用 /3GB 开关?

除非在 Boot.ini 文件中使用 /3GB 开关,否则进程和应用程序的虚拟地址空间仍被限制为 2 GB。 http://www.microsoft.com/whdc/system/platform/server/pae/paemem.mspx

如果使用 /3GB,您可以获得 1 GB 的额外费用,这可能会奏效吗?

【讨论】:

我在 64 位平台上...使用 64 位驱动程序。检查问题更新 而且我不认为应该有内存问题...上面的功能只是读取工作表的名称【参考方案2】:

阅读这篇文章

http://office.microsoft.com/en-us/excel-help/excel-specifications-and-limits-HP010073849.aspx

也许您的文件有超过 1,048,576 行乘 16,384 列?

【讨论】:

该文件是一个有效的 excel 文件...我可以在 excel 97 中很好地打开它 您的文件中有多少列?

以上是关于ACE oleDb 驱动程序无法处理巨大的 excel 文件的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server:无法为链接服务器“(null)”初始化 OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”的数据源对象

Microsoft.ACE.OLEDB.12.0 提供程序未注册

ACE.oledb 未出现在提供者列表中

microsoft.ace.oledb.12.0 提供程序未注册

未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序解决办法

microsoft.ace.oledb.12.0 提供程序未注册错误从后面的代码修复