我不知道标题是否正确 - 因此允许编辑使其正确。
问题 - 使用Vb.net代码,当我读取100,000条记录的excel文件时,使用连接字符串和SQL查询,需要3分钟(对我来说太长时间了 - 我想要一个解决方案)来完成。
但是,当我提交另一份300,000条记录的excel文件时(我的要求是阅读50万条记录) - 所花费的时间超过30分钟(我无法容忍并杀死该程序)
请帮助我理解这种差异以及为什么需要这么长时间阅读。
(我没有提供任何代码示例,因为网上有数千个这样的示例代码可用于建立与excel文件的连接(Office 2010)以及如何运行查询来读取记录)
提前感谢您的帮助和时间。作为一个解决方案,我想把300,000个记录文件分成每个10,000条记录的文件 - 但是,如何在不浪费开放和阅读时间的情况下这样做呢?
Sabya
P.S - 使用带有8 GB RAM的核心2 duo与Windows Server 2008和Windows 7
答案 0 :(得分:0)
所以,我不使用vb.net,但如果你熟悉java,我可以建议你Apache POI库。 POI将所有数据加载到内存中,对于我的情况,它可以完美地运行,之后你可以将它存储到mysql或其他任何我用poi读取数百个文件,这对我很有帮助。 Here我发现了一个与你相似的问题 here您可以找到POI绩效讨论。
另一个解决方案是将excel文件导出到csv并在之后读取它,我认为它也会很快。
答案 1 :(得分:0)
答案 2 :(得分:0)
Ishikawa问,如果vb.net是必不可少的 - 我的回答是肯定的,因为它是用VB.Net Framework 4.0编写的应用程序的一部分。他还谈到将excel导出到csv并尝试 - 但是,我担心,如果开放和阅读需要花费这么多时间,(花了9个小时!!) - 转换无济于事。用户将杀死这个过程 - 我相信。
Soandos要求查询 - 它是 - “从excel文件中选择前1 *” - 我正逐一阅读。我认为,问题不在于此查询,因为同样的查询可以很好地读取100,000条记录。
KronoS支持Soandos,我已在上面回答。对于他/她的第二点,答案是 - 我必须要擅长 - 这是用户提供的。我无法改变它。
我不知道是谁回答了这个问题 - 但禁用宏的想法 - 是一个非常好的观点。我不应该禁用所有宏,所有过滤器并取消隐藏 - 以简单的方式读取所有数据吗?我会试试。
300,000条记录excel文件的总大小为61 MB - 它不是很大!!创造记忆问题?
我发现在excel中简单读取记录的速度不是线性的。它在4秒内读取10,000条记录,但在27秒内读取50,000条,在60秒内读取100,000条等等。我希望 - 如果有人能告诉我如何索引excel文件来读取大文件。当我得到一个50万行的excel文件时,我不知道问题的大小是什么?
答案 3 :(得分: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