为什么将文本文件粘贴到Excel中会切断中间的句子

时间:2017-10-05 14:22:59

标签: excel vba excel-vba

我写了一个循环遍历数百个简单文本文件的脚本。该脚本打开一个文件,将其粘贴到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

谢谢!

2 个答案:

答案 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

如果仍然失败,则需要提供问题文本文件。