导入巨大的数据文件(Microsoft Excel)
Excel对工作表中的行数有限制,最多65,535。但是,很可能有一个原始数据文件的行数超过了此数目。如果您需要将该文件导入Excel,那么在不升级到Excel 2007或更高版本的情况下,这样做似乎几乎是不可能的。 (那些更高的版本突破了65,535行的限制。)但是,您可以做一些事情。
一种可能是复制原始文本文件(您要导入的文本文件),然后缩减每个文件的大小。例如,如果您总共有110,000行需要导入到Excel中,并且您在65,535行的限制下运行,则可以制作原始文本文件的两个副本。删除第一个文本文件的后半部分和第二个文本文件的前半部分。因此,您可以将第一个文件(现在为55,000行)导入到一个工作表中,并将第二个文件(也为55,000行)导入
进入第二。
如果不想分解输入文件,则可以考虑将文件导入Access。与Excel不同,Access实际上对可以导入的行数没有限制。然后,您可以在Access中使用文件,也可以导出文件的一部分以在Excel中使用。
最后,您可以使用宏将记录导入大源文件中。您可以通过多种方法来执行此操作,但是任何方法背后的基本思想都是从源文件中获取每一行并将其放置在工作表的新行中。该宏必须跟踪其放置了多少行,并在必要时切换到新的工作表。
Public Sub LoadFile() Dim strLine As String Dim I As Long Dim J As Long Dim iLen As Integer Dim iSh As Integer Dim lL As Long Dim sDelim As String Dim MaxSize As Long sDelim = Chr(9) MaxSize = 65000 I = 0 Open "C:\MyDir\MyFile.txt" For Input As #5 Do While Not EOF(5) iSh = (I / MaxSize) + 1 lL = I Mod MaxSize Line Input #5, strLine If Right(strLine, 1) <> sDelim Then strLine = Trim(strLine) & sDelim End If J = 0 Do While Len(strLine) > 1 iLen = InStr(strLine, sDelim) Worksheets("Sheet" & iSh).Offset(lL, J).Value = _ Trim(Left(strLine, iLen - 1)) strLine = Trim(Right(strLine, Len(strLine) - iLen)) J = J + 1 Loop I = I + 1 Loop Close #5 End Sub
该宏假定您的工作簿中已有足够的工作表来包含数据,并且它们的编号分别为Sheet1,Sheet2,Sheet3等。要在程序中检查的两个变量是sDelim和MaxSize的设置。第一个指定在正在读取的信息中哪个字符用作字段定界符。第二个参数指定每个工作表上所需的最大行数。 (不要将MaxSize设置为大于您的Excel版本允许的最大值。)
最后,请注意宏将打开文本文件MyFile.txt。您将需要更改此Open语句,以便它打开您要导入的真实源文件。
注意:
如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。
_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。
本技巧(2533)适用于Microsoft Excel 97、2000、2002和2003。