关于性能,记住 EXCEL 是电子表格,而不是数据库。
它允许非程序员做编程类型的事情。混合代码和 excel 程序本身很少优雅。
所有这些都是 vbscript,但 vbscript 在 VBA 中工作,但不使用 createobject 可以更快。
这取决于您如何处理数据。如果它是线性的,那么这很容易
Set fso = CreateObject("Scripting.FileSystemObject")
Set srcfile = fso.GetFile(objArgs(0))
If err.number = 0 then Set TS = srcFile.OpenAsTextStream(1, 0)
Src()=Split(Repace(ts.readall, VBCR, ""), VBLF)
For Each Line in Src()
Field() = Split(Line, ",")
msgbox Field(0) & Field(1)
Next
但是如果你的数据很大,这会占用内存,这一次只能读取一行。
Do Until srcfile.AtEndOfStream
Line=srcfile.readline
Field() = Split(Line, ",")
msgbox Field(0) & Field(1)
Loop
比数组更强大的是字典和记录集。记录集可以在内存中创建,但由于 CSV 是数据库文件,ADO 可以读取它们并返回而不是作为记录集(您可以保存)。这是MS网站上的一个示例,介绍了如何使用ADO来查询和获取我自己的一个又一个。
https://msdn.microsoft.com/en-us/library/ms974559.aspx?f=255&MSPPError=-2147217396
On Error Resume Next
Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = &H0001
Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")
strPathtoTextFile = "C:\Databases\"
objConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & strPathtoTextFile & ";" & _
"Extended Properties=""text;HDR=YES;FMT=Delimited"""
objRecordset.Open "SELECT * FROM PhoneList.csv", _
objConnection, adOpenStatic, adLockOptimistic, adCmdText
Do Until objRecordset.EOF
Wscript.Echo "Name: " & objRecordset.Fields.Item("Name")
Wscript.Echo "Department: " & _
objRecordset.Fields.Item("Department")
Wscript.Echo "Extension: " & objRecordset.Fields.Item("Extension")
objRecordset.MoveNext
Loop
自己做
Sub Swap
Dim LineCount
Set rs = CreateObject("ADODB.Recordset")
With rs
.Fields.Append "LineNumber", 4
.Fields.Append "Txt", 201, 5000
.Open
LineCount = 0
Do Until Inp.AtEndOfStream
LineCount = LineCount + 1
.AddNew
.Fields("LineNumber").value = LineCount
.Fields("Txt").value = Inp.readline
.UpDate
Loop
.Sort = "LineNumber DESC"
Do While not .EOF
Outp.writeline .Fields("Txt").Value
.MoveNext
Loop
End With
End Sub