我正在 VBA 中创建一组 csv 文件。
我的脚本正在创建我需要的数据集,但循环的多次迭代中的行数不同。例如,对于 i=2,我有 100,000 行,但对于 i=3,我有 22,000 行。问题是当 Excel 保存这些单独的 csv 文件时,它不会在末尾截断空间。这会在文件末尾留下 78,000 个空白行,这是一个问题,因为我需要生成大约 2,000 个文件,每个文件都有几兆字节大。(我在 SQL 中有一些我需要的数据,但不能在 SQL 本身中进行数学运算。长话短说。)
手动保存时通常会出现此问题 - 您需要在删除行后关闭文件,然后重新打开,在这种情况下这不是一个选项,因为它在 VBA 中自动发生。使用另一种语言的脚本保存后删除空白行并不是一个真正的选择,因为我实际上需要输出文件以适合可用的驱动器,而且它们现在不必要地巨大。
我试过了Sheets(1).Range("A2:F1000001").ClearContents
,但这不会截断任何东西。删除行在保存之前应该同样没有影响,因为 Excel 将所有行保存到文件末尾,因为它存储了操作的最右下角的单元格。有没有办法让excel只保存我需要的行?
这是我用来保存的代码:(截断发生在早些时候,在调用这个的路由中)
Sub SaveCSV()
'Save the file as a CSV...
Dim OutputFile As Variant
Dim FilePath As Variant
OutputPath = ActiveWorkbook.Worksheets("Macro").Range("B2").Value
OutputFile = OutputPath & ActiveWorkbook.Worksheets("Macro").Range("B1").Value
Application.DisplayAlerts = False 'DISABLE ALERT on Save - overwrite, etc.
ActiveWorkbook.SaveAs Filename:=OutputFile, FileFormat:=xlCSV, CreateBackup:=False
Application.DisplayAlerts = True 'DISPLAY ALERTS
End Sub
相关的代码在这里:
'While looping through Al, inside of looping through A and B...
'Created output values needed in this case, in an array...
Sheets(1).Range("A2:E90001") = Output
ActiveWorkbook.Worksheets(1).Range("F2").Formula = "=(does not matter, some formula)"
ActiveWorkbook.Worksheets(1).Range("F2").AutoFill Destination:=Range("F2:F90001")
'Set Filename to save into...
ActiveWorkbook.Worksheets("Macro").Range("B1").Value = "Values_AP" & Format(A, "#") & "_BP" & Format(B, "#") & "_Al" & Format(Al, "#")
'Save Sheet and reset...
Call SaveCSV
Sheets(1).Range("A2:F90001").ClearContents
CurrRow = 1
Next Al