我写了一个循环遍历数百个简单文本文件的脚本。该脚本打开一个文件,将其粘贴到Excel中,提取一些数据,删除文本文件并转到下一个文件。直到几天前,当它打开其中一个文件(它只发生在那个特定文件上)之后,它完美地工作了,然后将它粘贴到Excel中我发现其中一行突然结束了...... 。
如果我Debug.Print
该文件,我可以看到一切都在那里,但是如果我将它粘贴到Excel中,同一行突然结束......
有谁知道可能导致什么?更奇怪的是,如果我手动将文本复制并粘贴到新的文本文件中,Excel会毫无问题地处理...
下面是一个处理这些文本文件的代码。
MyFolder = "C:\Test\"
StrFile = Dir(MyFolder & "tempfile.txt")
Open MyFolder & StrFile For Binary As #1
MyData = Space$(LOF(1))
Get #1, , MyData
Close #1
strData() = Split(MyData, vbCrLf)
LineNumber = 1
For xy = LBound(strData) To UBound(strData)
Debug.Print strData(xy) 'THIS WORKS!
Range("A" & LineNumber).Value = strData(xy) 'THIS DOESN'T!
LineNumber = LineNumber + 1
Next xy
谢谢!
答案 0 :(得分:1)
我找到了造成这个问题的原因!我在Word中打开了文本文件,注意到突然切割的行有一些在记事本中看不到的奇怪符号(四个空方块?)。然后我开始在Word中打开所有其他文件,其中没有一个拥有它们。
所以我开始阅读" 不可打印的字符"并提出了这个解决方案......我用空格替换每个ASCII(0) (NULL)
字符。
我发布它以防其他人必须处理这样的问题:
MyFolder = "C:\Test\"
StrFile = Dir(MyFolder & "tempfile.txt")
Open MyFolder & StrFile For Binary As #1
MyData = Space$(LOF(1))
Get #1, , MyData
Close #1
strData() = Split(MyData, vbCrLf)
LineNumber = 1
For Each sData In strData
sData = Replace(sData, Chr(0), " ")
Range("A" & LineNumber).Value = sData 'Now it works!!
LineNumber = LineNumber + 1
Next
感谢大家的帮助!
答案 1 :(得分:0)
(需要格式化答案,但这确实是评论)
尝试一下:
Sub tgr()
Dim oFSO As Object
Dim sFolderPath As String
Dim sFileName As String
Dim sFullText As String
Dim aOutput() As String
Set oFSO = CreateObject("Scripting.FileSystemObject")
sFolderPath = "C:\Test\"
sFileName = Dir(sFolderPath & "tempfile.txt")
sFullText = oFSO.OpenTextFile(sFolderPath & sFileName).ReadAll
aOutput = Split(sFullText, vbCrLf)
With Range("A1").Resize(UBound(aOutput) - LBound(aOutput) + 1)
.Value = Application.Transpose(aOutput)
End With
End Sub
如果仍然失败,则需要提供问题文本文件。