【问题标题】:Import a txt file into excel and format with text to column将 txt 文件导入 excel 并将文本格式化为列
【发布时间】:2014-12-28 09:20:33
【问题描述】:

我正在尝试通过 VBA 代码将 .txt 文件导入 Excel,然后使用 text to column 命令格式化内容。

txt 文件包含以下内容:

DATE | 1 | 2 | 3 | 4 | Something ||||| Not Sure |||||
DATE | 5 | 6 | 7 | 8 | New ||||| Whatever |||||

目前,使用我找到并拼凑在一起的代码,我已经做到了这一点

Sub Sample()
    Dim MyData As String, strData() As String, myFile As String

    myFile = Application.GetOpenFilename()

    Open myFile For Binary As #1
    MyData = Space$(LOF(1))
    Get #1, , MyData
    Close #1
    strData() = Split(MyData, "|")


End Sub

这只是从 txt 文件中获取所有数据并将每个项目分成一个数组。

我想将数组中的项目放入 Excel 的列中,从 Range("A5") 开始并为每个新行计算。

帮助?

(编辑:我想在任何时候找到一个空数组选择时向下移动一行,但是每行中有很多空白,这是行不通的。此外,行的长度因内容而异。 )

【问题讨论】:

  • 您将 Text 文件处理为 Binary 的任何特殊原因?
  • 没有理由,除了天真地尝试东西

标签: excel text file-conversion vba


【解决方案1】:

您需要通过两种方式拆分数据:使用 NewLine 字符分成几行,然后使用| 分成单元格

请注意,您的文本文件中的换行符可能不是vbNewLine。如果这段代码没有分成几行,那就是第一个看的地方。

要完成您的代码,请尝试

Sub Sample()
    Dim MyData As String
    Dim lineData() As String, strData() As String, myFile As String
    Dim i As Long, rng As Range

    ' lets make it a little bit easier for the user
    myFile = Application.GetOpenFilename("Text Files (*.txt), *.txt")

    Open myFile For Binary As #1
    MyData = Space$(LOF(1))
    Get #1, , MyData
    Close #1
    ' Split into wholes line
    lineData() = Split(MyData, vbNewLine)
    Set rng = Range("A5")
    ' For each line
    For i = 0 To UBound(lineData)
        ' Split the line
        strData = Split(lineData(i), "|")
        ' Write to the sheet
        rng.Offset(i, 0).Resize(1, UBound(strData) + 1) = strData
    Next
End Sub

作为替代方案,将 .txt 文件视为文本

Sub Sample()
    Dim fn As Integer
    Dim MyData As String
    Dim lineData As String, strData() As String, myFile As String
    Dim i As Long, rng As Range

    myFile = Application.GetOpenFilename("Text Files (*.txt), *.txt")

    Set rng = Range("A5")

    ' Lets not rely on Magic Numbers
    fn = FreeFile
    Open myFile For Input As #fn
    i = 1
    Do While Not EOF(fn)
        Line Input #fn, lineData
        strData = Split(lineData, "|")
        rng.Cells(i, 1).Resize(1, UBound(strData) + 1) = strData
        i = i + 1
    Loop
    Close #fn
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 2013-11-11
    • 1970-01-01
    • 2018-04-18
    • 1970-01-01
    • 2014-10-01
    相关资源
    最近更新 更多