从分隔文件中将数据插入Excel表格的整个范围

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

find下面的代码片段。

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 

您可以尝试在Excel中打开分隔文件作为csv / txt文件:这很快。
或者,您也可以按单元格创build并填充2维变体数组,然后将变体数组分配给Excel范围。 这将会更快,因为它将对象模型的开销最小化。

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

下面的代码将每行导入为一个变体数组,然后逐行转储到Excel。 我可能应该更进一步,并将每行数组转储到一个单一的组合数组,然后再将数据input到Excel中,但我这样做,因为我不清楚为什么你忽略了一个单一的总体input

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

  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 

这里是我在网上find的一些代码,它为我快速工作。

 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 

希望这可以帮助!