0

我们正在从事一项工作,该工作需要将数据从分隔的文本文件插入到 Excel 工作表中。代码已经准备好并且可以工作了,但是它会逐个单元格地插入数据,这使得它的过程非常缓慢。请建议一种将数据一次性插入整个范围的方法,这应该会使操作更快。

找到下面的代码片段。

    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
4

3 回答 3

1

您可以尝试在 Excel 中将分隔文件作为 csv/txt 文件打开:这很快。
或者,您可以逐个单元格地创建和填充二维变量数组,然后将变量数组分配给 Excel 范围。这将快得多,因为它最大限度地减少了对象模型的开销。

于 2012-05-17T07:09:35.493 回答
1

为什么不能像在 Excel 中一样打开 csv 文件(或变体)

下面的代码将每一行作为变量数组导入,然后逐行转储到 Excel。在将数据输入 Excel 之前,我可能应该更进一步,将每个行数组转储到一个组合数组中,但我这样做是因为我不清楚你为什么忽略单个整体输入

另外,我认为这些行是多余的,因为它只是在最右边的单元格中添加了一个空白“记录”。

 If Right(WholeLine, 1) <> Sep Then    
 WholeLine = WholeLine & Sep   
 End If

主要代码

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
于 2012-05-17T07:15:36.403 回答
0

这是我在网上找到的一些代码,对我来说很快。

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

希望这可以帮助!

于 2012-06-06T14:31:51.830 回答