C#通过OledbConnection System.OutOfMemoryException打开大型Excel文件(150MB)

时间:2009-12-30 00:51:50

标签: c#

我必须打开一个带有半毫米记录的大型excel文件150MB(excel 2007 .xlsx文件),我必须将其迁移到sql server,我使用oledbconnection,但是当我尝试打开连接时需要更多超过5分钟,然后出现System.OutMemoryExcepion。我认为这个连接试图打开内存中的所有文件,我怎么能逐行读取。 我正在使用Visual Net 2005和C#

string archivoExcel="c:\largeExcel.xlsx"
string conneStringInraSIS = "Provider=Microsoft.ACE.OLEDB.12.0;" +
                                    "Data Source=" + archivoExcel + ";" +
                                    "Extended Properties='Excel 12.0;HDR=YES;'";


OleDbConnection connexcel = new OleDbConnection(conneStringInraSIS);
connexcel.Open();        

4 个答案:

答案 0 :(得分:1)

优先级#1应该从xlsx电子表格中获取数据。发生这种情况后应用业务逻辑。我将从表格中导出CSV并处理它们。

答案 1 :(得分:1)

我遇到过这个问题。我在处理这个问题时发现的最好的事情是去codeplex.com并下载Excel.dll。这个DLL将很容易解决这个问题。使用此功能,您可以直接将数据保存到数据集中,然后执行您想要执行的操作。您可以在网站上找到示例代码。

答案 2 :(得分:0)

新答案(基于评论中的信息):

了解VSTO。我会创建一个插件,允许管理员单击功能区按钮将数据上传到SQL Server,然后从SQL Server检索信息(这将允许Excel处理自己的文件,确切地说它最好的方式)。

以下是一个可以帮助您入门的链接:MSDN Code Sample

您可以下载VSTO here

答案 3 :(得分:0)

有些评论建议将Excel文件导出为CSV并逐行解析CSV文件,但这似乎不能解决您的问题。

然而,您可以使用Excel ActiveX对象打开xlsx文件并将其保存为代码中的CSV。 Workbook对象具有采用文件格式的SaveAs方法。

因此,您可以直接从xlsx文件中获取CSV数据,而不必让您的客户担心它。

这假设您在运行此过程的系统上安装了Excel。