我在互联网上搜索了以下问题的 VBA 解决方案,但没有成功。我的文本文件包含 3-5 百万行数据(这因文本文件而异),但我只需要提取最后 12 行实际数据并将其放入 Excel 工作表中,最好用空格和制表符分隔。显然,我无法将文本文件直接加载到具有一百万行左右限制的 Excel 中,并且使用 DataTypes.Add 也不会带来任何好处。
有没有办法以分隔方式将最后几行数据导入到 Excel 中?我的数据看起来像这样
来自文本文件:
Blah blah blah 我不需要 500 万行的东西
5550203行:
Line5550204:这是这一段数据的标题
5550205行:
第5550206行:数据标题1 数据标题2 数据标题3
5550207行:
第5550208行:数据单元1 数据单元2 数据单元3
5550209行:
5550210行:数据1数据2数据3
5550211行:
第5550212行:下一部分数据的标题
5550213行:
第5550214行:数据标题1a 数据标题2a 数据标题3a
5550215行:
第5550216行:数据单元1a 数据单元2a 数据单元3a
5550217行:
第5550218行:数据1a数据2a数据3a
文件结束
显然,我不想导入空行,只想导入数据。标题是可选的,我不需要单位。任何帮助或指出我正确的方向将不胜感激。预先感谢您!
最佳答案
出于速度原因,我们希望避免读取整个文件只是为了最终找到最后几行。
您可以使用seek
函数从文件的任何位置读取。然而,由于线的长度可能不同,我们不知道确切的位置。以下代码假设最大行长度并计算我们最多需要读取多少字节。这些字节被读入缓冲区,并且缓冲区被分成行。现在我们可能会有很多行,但很容易只获取其中的最后 n 行:
Sub readfileTail(filename As String, Optional maxLines As Long = 12)
Const maxLineLen = 256
Dim f As Integer
f = FreeFile
Open filename For Binary As #f
Dim fileLen As Long, filePos As Long
fileLen = LOF(f) ' Get size of file in bytes.
filePos = fileLen - (maxLines * maxLineLen)
Dim buffer As String
Seek #f, filePos
buffer = Input((maxLines * maxLineLen), #f) ' Read character.
Dim lines() As String, i As Long, startline As Long
lines = Split(buffer, vbCrLf)
startline = UBound(lines) - maxLines + 1
If startline < 0 Then startline = 0
For i = startline To UBound(lines)
Debug.Print i, lines(i)
Next i
Close #f
End Sub
关于excel - 在 Excel VBA 中从大型文本文件复制底行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66380806/