将数据从分隔文件插入整个excel工作表范围
我们正在处理一项作业,该作业需要将数据从分隔文本文件插入excel工作表。代码已经准备好并且可以工作了,但是它一个单元接一个单元地插入数据,这使得这个过程非常缓慢。请建议一种一次性将数据插入整个范围的方法,这将加快操作速度 找到下面的代码片段将数据从分隔文件插入整个excel工作表范围,excel,vba,Excel,Vba,我们正在处理一项作业,该作业需要将数据从分隔文本文件插入excel工作表。代码已经准备好并且可以工作了,但是它一个单元接一个单元地插入数据,这使得这个过程非常缓慢。请建议一种一次性将数据插入整个范围的方法,这将加快操作速度 找到下面的代码片段 Open FName For Input Access Read As #1 While Not EOF(1) Line Input #1, WholeLine If Right(WholeLine, 1) <> Se
Open FName For Input Access Read As #1
While Not EOF(1)
Line Input #1, WholeLine
If Right(WholeLine, 1) <> Sep Then
WholeLine = WholeLine & Sep
End If
ColNdx = SaveColNdx
Pos = 1
NextPos = InStr(Pos, WholeLine, Sep)
While NextPos >= 1
TempVal = Mid(WholeLine, Pos, NextPos - Pos)
Cells(RowNdx, ColNdx).Value = TempVal
Pos = NextPos + 1
ColNdx = ColNdx + 1
NextPos = InStr(Pos, WholeLine, Sep)
Wend
RowNdx = RowNdx + 1
Wend
打开FName以读取为#1的输入访问
而不是EOF(1)
行输入#1,整行
如果正确(整行,1)则为9月
整条线=整条线和Sep
如果结束
ColNdx=SaveColNdx
位置=1
NextPos=仪表(位置、全线、九月)
而NextPos>=1
TempVal=Mid(全线、Pos、下一个Pos-Pos)
单元格(RowNdx,ColNdx).Value=TempVal
Pos=NextPos+1
ColNdx=ColNdx+1
NextPos=仪表(位置、全线、九月)
温德
RowNdx=RowNdx+1
温德
您可以尝试在Excel中以csv/txt文件的形式打开带分隔符的文件:太快了或者,您可以逐个单元格创建并填充二维变量数组,然后将变量数组指定给Excel范围。这会更快,因为它将对象模型开销降至最低。为什么不能像在Excel中一样打开csv文件(或变体) 下面的代码将每一行作为变量数组导入,然后逐行转储到Excel。在将数据输入Excel之前,我可能应该更进一步,将每个行数组转储到单个组合数组中,但我这样做是因为我不清楚为什么您会忽略单个整体输入 此外,我认为这些行是多余的,因为它只是在最右边的单元格中添加了一条空白的“记录”
If Right(WholeLine, 1) <> Sep Then
WholeLine = WholeLine & Sep
End If
如果正确(全行,1)则
整条线=整条线和Sep
如果结束
主代码
Sub Test()
Dim fName As String
Dim Sep As String
Dim WholeLine As String
Dim lngCnt As Long
Dim aRRSplit()
fName = "c:\test.csv"
Sep = ","
Open fName For Input Access Read As #1
While Not EOF(1)
Line Input #1, WholeLine
If Right$(WholeLine, 1) <> Sep Then
WholeLine = WholeLine & Sep
End If
aRRSplit = Application.Transpose(Split(WholeLine, Sep))
lngCnt = lngCnt + 1
Cells(lngCnt, 1).Resize(1, UBound(aRRSplit)) = Application.Transpose(aRRSplit)
Wend
Close #1
End Sub
子测试()
作为字符串的Dim fName
将Sep设置为字符串
像细绳一样模糊的整条线
暗长
Dim arrspit()
fName=“c:\test.csv”
Sep=“,”
打开fName以读取为#1的输入访问
而不是EOF(1)
行输入#1,整行
如果正确$(整行,1)则为9月
整条线=整条线和Sep
如果结束
aRRSplit=Application.Transpose(Split(WholeLine,Sep))
lngCnt=lngCnt+1
单元格(lngCnt,1).Resize(1,UBound(arrspilt))=Application.Transpose(arrspilt)
温德
关闭#1
端接头
以下是我在网上找到的一些代码,这些代码对我来说很快就能生效
Function doFileQuery(fileName As String, outSheet As String) As Boolean
Dim rootDir As String
rootDir = "W:\Development"
Dim connectionName As String
connectionName = "TEXT;" + rootDir + "\" + fileName
With Worksheets(outSheet).QueryTables.Add(Connection:=connectionName, Destination:=Worksheets(outSheet).Range("A5"))
.Name = fileName
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlOverwriteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 437
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileOtherDelimiter = "|"
.Refresh BackgroundQuery:=False
End With
doFileQuery = True
End Function
希望这有帮助 我更倾向于你的第一个建议。直接使用Excel打开文本文件。这将非常快:)