1

我不知道标题是否正确 - 因此允许编辑使其正确。

问题 - 使用 Vb.net 代码,当我使用连接字符串和 sql 查询读取 100,000 条记录的 excel 文件时,需要 3 分钟(对我来说太长 - 我想要一个解决方案,请)完成。

但是,当我提交另一个包含 300,000 条记录的 excel 文件时(我的要求是读取 5000 万条记录) - 花费的时间超过 30 分钟(我无法容忍并杀死了该程序)

请帮助我理解这种差异以及为什么需要这么长时间才能阅读。

(我没有提供任何代码示例,因为网上有成千上万的此类示例代码可用于说明如何建立与 Excel 文件(Office 2010)的连接以及如何运行查询以读取记录)

提前感谢您的帮助和时间。作为一种解决方案,我想将 300,000 条记录文件切割成每个 10,000 条记录的文件 - 但是,如何在不浪费打开和阅读时间的情况下做到这一点?

萨比亚

PS - 在 Windows Server 2008 和 Windows 7 中使用 core 2 duo 和 8 GB RAM

4

4 回答 4

0

在此处输入图像描述


所以,我不使用 vb.net,但如果您熟悉 java,我可以建议您使用Apache POI库。POI 将所有数据加载到内存中,对于我的情况,它运行良好,之后您可以将其存储到 mysql 或其他任何东西,我用 poi 读取了一百个文件,这对我很有帮助。 在这里,我找到了一个与您的问题相似的问题。在这里
您可以找到 POI 性能讨论。

另一种解决方案是将 excel 文件导出到 csv 并在此之后读取它,我认为它也会很快。

于 2012-08-14T13:53:37.313 回答
0
  • 加载 Excel 后,您可以暂时禁用宏运行。
  • 内存限制是另一个原因,因为 excel 可能会使用大量内存。如果我正在运行这个大型电子表格(100K)单元格,我会将内存库耗尽到 16GB)。
  • 确保对 excel 文件和硬盘进行碎片整理(您可以看到真正的影响)。
  • 如果从不关闭 PC,请尝试关闭并重新启动。这可以解放进程以卸载未使用的 dll。
  • 将 pagefile.sys 的大小至少增加到 RAM 的 2.5 倍,以便顺利进行数据事务。
于 2012-08-14T14:28:55.903 回答
0

我在更新大型 excel 文件时遇到了类似的问题。我的解决方案 - 更新它的一部分,关闭,终止 excel 进程,重新打开,再次更新

        oexcel.DisplayAlerts = False
        obook.SaveAs(fnExcNew, 1)
        obook.Close()
        obook = Nothing
        KillExcel()
        oexcel = CreateObject("Excel.Application")
        oexcel.Workbooks.Open(fnExcNew)
        obook = oexcel.ActiveWorkbook
        osheet = oexcel.Worksheets(1)

Private Sub KillExcel()
    ' Kill all excel processes 
    Dim pList() As Process
    Dim pExcelProcess As System.Diagnostics.Process
    pList = pExcelProcess.GetProcesses
    For Each pExcelProcess In pList
        If pExcelProcess.ProcessName.ToUpper = "EXCEL" Then
            pExcelProcess.Kill()
        End If
    Next
End Sub
于 2012-08-31T16:52:19.330 回答
0
  1. 石川问,如果 vb.net 是必不可少的——我的回答是肯定的,因为它是用 VB.Net Framework 4.0 编写的应用程序的一部分。他还谈到了将 excel 导出到 csv 并尝试 - 但是,我担心,如果打开和阅读需要这么多小时,(花了 9 小时!!) - 转换将无济于事。用户将终止该进程 - 我敢肯定。

  2. Soandos 要求查询 - 它是 - “从 excel 文件中选择前 1*” - 我正在一一阅读。我认为,问题不在于这个查询,因为这个查询可以很好地读取 100,000 条记录。

  3. KronoS 支持 Soandos,我已经在上面回答了。对于他/她的第二点,答案是 - 我必须拥有 excel 作为 - 这是用户提供的。我无法改变它。

  4. 我看不出谁回答了这个问题——但禁用宏的想法——是一个很好的观点。我不应该禁用所有宏,所有过滤器并取消隐藏所有 - 以简单的方式读取所有数据吗?我会试试的。

300,000 条记录的 Excel 文件的总大小为 61 MB - 它不是很大!制造内存问题?

我发现在excel中简单读取记录的速度并不是线性的。它在 4 秒内读取 10,000 条记录,但在 27 秒内读取 50,000 条,在 60 秒内读取 100,000 条等。我希望 - 如果有人能告诉我如何索引 Excel 文件以读取大文件。当我得到一个 5000 万行的 excel 文件时,我不知道问题的大小是多少?

于 2012-08-16T06:33:06.350 回答