【发布时间】:2020-07-08 14:24:39
【问题描述】:
更新:我刚刚发现有人拥有更强大的服务器来完成分配给我的任务,所以我没有让这个程序足够快也没关系。但是,下面的答案(自动化 Excel)帮助使程序快了三倍,所以我会推荐给文件较少(但仍然很多)的人。
我正在尝试将许多(超过 300,000 个).txt 文件转换为 .xls 文件。我在这里找到了如何做到这一点:
Batch Convert TXT to XLS Using VBA
但它真的很慢(在一个多小时内,它只转换了大约 300,000 个文件中的 200 个),即使文件不是那么大。
我尝试通过关闭 ScreenUpdating 来加速它,但我无法成功关闭 ScreenUpdating。有人可以解释在哪里关闭 ScreenUpdating 以便我的代码运行得更快吗?或者,更好的是,有任何关于更高效程序的想法吗?
代码如下:
Sub TXTconvertXLS()
'Variables
Dim wb As Workbook
Dim strFile As String
Dim strDir As String
Application.ScreenUpdating = False
'Directories
strDir = 'path went here
strFile = Dir(strDir & "*.txt")
Do While strFile <> ""
Set wb = Workbooks.Open(strDir & strFile)
With wb
.SaveAs Replace(wb.FullName, ".txt", ".xls"), 50
.Close False '<-already saved in the line directly above
End With
Set wb = Nothing
strFile = Dir '<- stuffs the next filename into strFile
Loop
Application.ScreenUpdating = True
End Sub
【问题讨论】:
-
恐怕
ScreenUpdating=false与打开的工作簿 无关。为了加快这个过程,我认为你应该使用其他语言来做到这一点,并隐藏 Excel。我相信大多数时候你的程序都忙于 GUI 的东西(打开工作簿并更新 Excel 本身的界面)。 -
您实际上是在尝试仅重命名 300k 文件吗?
-
将txt文件保存为xls文件的目的是什么?这对您更大的业务需求图景有什么价值?
-
文件有多大,您将它们保存到哪里(本地驱动器或网络)?您是否尝试过计时哪个部分最慢?你真的有一个包含 30 万个文件的文件夹吗?
-
这些文本文件是什么样的?如果它们是 csv 文件,也许只需将文件扩展名从
.txt更改为.cvs。安装 Office 时的标准 Windows 文件关联默认情况下会在 Excel 中打开此类文件。