我试图返回一个等于两个或多个空格之后的第一个字母的位置的值。
我有一个工具可以将具有可变列长度的表提取到 TXT 文档中。我需要将这些表放入 Excel 工作表中,而不必为每个表中的每一列设置固定宽度(这是要完成的大量编码)。我试图根据两个或多个空格后第一个字符的位置找到更动态的方法。
请记住,并非所有行都已完全填充,但第一行将成为获得列宽的完美候选者。
举个例子,文本的行看起来像这样
约翰·罗伯特·埃里克·汤姆
10 11 143 43
21 265 56
99 241 76
到目前为止,我所做的只是让它按照下面的代码以固定宽度工作
Sub exporttosheet()
Dim fPath As String
fPath = "C:\test.txt"
Const fsoForReading = 1
Const F_LEN_A As Integer = 10
Const F_LEN_B As Integer = 23
Const F_LEN_C As Integer = 7
Const F_LEN_D As Integer = 10
Dim objFSO As Object, objTextStream As Object, txt, f1, f2, f3, f4
Dim start As Integer
Dim fLen As Integer
Dim rw As Long
Set objFSO = CreateObject("scripting.filesystemobject")
Set objTextStream = objFSO.OpenTextFile(fPath, fsoForReading)
rw = 1
Do Until objTextStream.AtEndOfStream
txt = objTextStream.Readline
f1 = Trim(Left(txt, F_LEN_A))
start = F_LEN_A + 1
f2 = Trim(Mid(txt, start, F_LEN_B))
start = start + F_LEN_B + 1
f3 = Trim(Mid(txt, start, F_LEN_C))
start = start + F_LEN_C + 1
f4 = Trim(Mid(txt, start, F_LEN_D))
With ThisWorkbook.Sheets("data").Cells(rw, 1).Resize(1, 4)
.NumberFormat = "@" 'format cells as text
.Value = Array(f1, f2, f3, f4)
End With
rw = rw + 1
Loop
objTextStream.Close
End Sub