【发布时间】:2012-08-06 04:10:19
【问题描述】:
我需要将一些 CSV 导入 Excel 电子表格,每个 CSV 的行/列数都不同。问题是某些值是长数字字符串,例如341235387313289173719237217391,
Excel 会将这些值视为(双)数字,然后导致数据丢失。
我解决它的方法是使用以下vbafunction 来完成这项工作:
Sub readCSV(f As TextStream, sh As Worksheet)
i = 1
Do
l = Trim(f.ReadLine)
If l = "" Then Exit Sub 'skip the last empty line(s)
l = Mid(l, 2, Len(l) - 1)
ss = Split(l, """,""")
For j = LBound(ss) To UBound(ss) 'j starts from 0
Dim a As Range
With sh.Cells(i, j + 1)
.NumberFormat = "@" 'Force to text format
.Value = ss(j)
End With
DoEvents 'Avoid blocking the GUI
Next j
i = i + 1
Loop Until f.AtEndOfStream
End Sub
问题在于性能。它比通过 Data->From Text 导入数据或直接打开 CSV 慢得多。
有什么方法可以提高效率吗?
【问题讨论】:
-
尝试关闭屏幕更新并将计算设置为手动(不要忘记在最后重新打开它)。并尝试注释掉您的 DoEvents 调用。
-
最初我没有使用 DoEvents 调用,但是它仍然比直接加载慢得多。我必须使用它,因为我不能等待太久而不知道发生了什么。
标签: vba excel vba csv data-import