【发布时间】:2020-02-13 01:27:13
【问题描述】:
我有以下 VB 代码从 Excel WorkBook 生成 CSV 文件。
我的数据非常大,我希望代码每 10000 行开始分块。
我基本上希望它每 10000 行循环一次。
请帮忙。
Sub PriceList()
Set objworksheet = ThisWorkbook.Worksheets("Sales Price List")
output_path = CreateObject("WScript.Shell").specialfolders("Desktop")
Set myfileFSO = CreateObject("Scripting.FileSystemObject")
output_file_name = "Sales Price List" & ".txt"
Set myts = myfileFSO.CreateTextFile(output_path & "\" & output_file_name)
introw = 1
Count = 0
Do Until objworksheet.Cells(introw, 1).Value = ""
Count = Count + 1
introw = introw + 1
Loop
For i = 4 To Count
If i = 4 Then
myts.write "E;" & objworksheet.Cells(i, 1).Value & ";" & objworksheet.Cells(i, 2).Value & ";" _
& objworksheet.Cells(i, 3).Value & ";" & objworksheet.Cells(i, 4).Value & Chr(13) & Chr(10) & _
"L;" & objworksheet.Cells(i, 5).Value & ";" & objworksheet.Cells(i, 6).Value & ";" _
& objworksheet.Cells(i, 7).Value & ";" & objworksheet.Cells(i, 8).Value & ";" & objworksheet.Cells(i, 9).Value _
& ";" & objworksheet.Cells(i, 10).Value & ";" & objworksheet.Cells(i, 11).Value & ";" & objworksheet.Cells(i, 12).Value _
& ";" & objworksheet.Cells(i, 13).Value & ";" & objworksheet.Cells(i, 14).Value & ";" & objworksheet.Cells(i, 15) & Chr(13) & Chr(10)
End If
If i > 4 Then
If objworksheet.Cells(i, 2).Value = objworksheet.Cells((i - 1), 2).Value Then
myts.write "L;" & objworksheet.Cells(i, 5).Value & ";" & objworksheet.Cells(i, 6).Value _
& ";" & objworksheet.Cells(i, 7).Value & ";" & objworksheet.Cells(i, 8).Value & ";" _
& objworksheet.Cells(i, 9).Value & ";" & objworksheet.Cells(i, 10).Value & ";" _
& objworksheet.Cells(i, 11).Value & ";" & objworksheet.Cells(i, 12).Value & ";" _
& objworksheet.Cells(i, 13).Value & ";" & objworksheet.Cells(i, 14).Value & objworksheet.Cells(i, 15) & Chr(13) & Chr(10)
Else
myts.write "E;" & objworksheet.Cells(i, 1).Value & ";" & objworksheet.Cells(i, 2).Value & ";" _
& objworksheet.Cells(i, 3).Value & ";" & objworksheet.Cells(i, 4).Value & Chr(13) & Chr(10) & _
"L;" & objworksheet.Cells(i, 5).Value & ";" & objworksheet.Cells(i, 6).Value & ";" _
& objworksheet.Cells(i, 7).Value & ";" & objworksheet.Cells(i, 8).Value & ";" & objworksheet.Cells(i, 9).Value _
& ";" & objworksheet.Cells(i, 10).Value & ";" & objworksheet.Cells(i, 11).Value & ";" & objworksheet.Cells(i, 12).Value _
& ";" & objworksheet.Cells(i, 13).Value & ";" & objworksheet.Cells(i, 14).Value & ";" & objworksheet.Cells(i, 15) & Chr(13) & Chr(10)
End If
End If
Next
MsgBox "Done."
End Sub
【问题讨论】:
-
“开始分块”是什么意思?
-
我的意思是代码应该对每 1000 行执行一次处理。
-
每1000行生成一个文件?
-
是的,先生。如果可能的话。或者在同一个文件中从顶部开始,每 10000 行继续。
-
逐个单元格的访问将非常缓慢:如果您将所有数据读入二维数组并从那里访问,您的代码将运行得更快。