【问题标题】:Inserting data from text file in respective excel columns将文本文件中的数据插入到相应的 excel 列中
【发布时间】:2021-05-06 17:59:00
【问题描述】:

非常感谢提前 我有一个 .txt 文件,其中包含需要提取并放入 Excel 中相应列的数据。我对 VBA 编码非常陌生,并且尝试了很多,但是很难完成这项工作......下面显示了我到目前为止的代码,但是在运行时,它的工作方式有所不同。实际上数据需要放在各自的字段中作为excel中的样本。在 Excel 文件中,我已经将数据保存为如何获取并填写在相应的标题列中。

类型;帐号:银行参考;受益人姓名;日期;金额;BENE 帐号;BENE IFSC;BENE 银行名称;参考;BENE 邮件 ID IMPS;45605104698;60062000057200;ABCDEF;12122016;0000000001.00;10304060176;STRK0002018;印度国家银行;5110845;abce@gmail.com;

我用于提取上述数据并将其放入各自列的代码如下:-

Option Explicit

Sub importTXT()
Dim r As Range, myfile As Variant
Dim qt As QueryTable, i As Integer
Dim del As Range

'where myfile needs to select manually
myfile = Application.GetOpenFilename("All Files (*.*), **.*", _
, "Select TXT file", , False)
If myfile = False Then Exit Sub

'elseif its fixed
'myfile = "D:\sample student file"

Application.ScreenUpdating = False

With ActiveSheet
.Range("E7").CurrentRegion.Cells.Clear
With .QueryTables.Add(Connection:="TEXT;" & myfile, Destination:=.Range("$E$7"))
        .Name = "MST"
        .TextFilePlatform = 437
        .TextFileStartRow = 2
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileTabDelimiter = True
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
'delete query tables if found any.
    For Each qt In ActiveSheet.QueryTables
        qt.Delete
    Next qt
'Delete the Data Connections
If .Parent.Connections.Count > 0 Then
    For i = 1 To .Parent.Connections.Count
        .Parent.Connections.Item(i).Delete
    Next i
End If

For Each r In .Range("E7:X" & .UsedRange.Rows.Count)
    If InStr(r, "Title = ") > 0 Then
        r.Offset(, 1) = Mid(r.Value, InStr(r, " ") + 8, InStrRev(r.Value, " "))
        r.Offset(, 2) = Mid(r.Value, InStrRev(r.Value, " ") + 2, Len(r.Value) - InStrRev(r.Value, " ") - 2)
    Else
        If del Is Nothing Then
            Set del = r
        Else
            Set del = Union(del, r)
        End If
    End If
Next
End With
Application.ScreenUpdating = False
End Sub

需要插入数据的示例excel文件如下:-

【问题讨论】:

  • 我必须承认我对你的问题不太了解......所以,你尝试使用QueryTables.Add 在 Excel 工作表中打开一个 txt 文件。内容是否按预期打开?如果是,我们是否应该理解列的顺序与必要的不同。这种理解正确吗?如果可以,能否提供一个txt文件列与Excel表格的对应表? txt文件是否有可能不是一直在同一个位置?如果不是,则请求的对应应按照列标题进行:txt - E、F、G、H 等; xls - G、H、E、F 等
  • 我将在 10 到 15 分钟后离开我的办公室。如果您能尽快澄清上述问题,我可以提供一个解决方案,我认为...... E,F,G,H等可以表示为“E:AC”。无论如何,它应该是一个连续的列范围。
  • edit 您的问题明确说明出了什么问题和/或具体是什么“不起作用”。如果您遇到任何错误,请包括消息并指出哪条指令正在爆炸。如果输出不符合预期,请说明实际输出与预期输出有何不同。
  • 非常感谢 FaneDuru,为了更好地理解,我将与您分享文件。在那里你会完全了解
  • @FaneDuru,这是最后一次请看

标签: vba import excel-2010 export-to-excel vba7


【解决方案1】:

我使用了不同的方法,但我认为这可以满足您的需要:

  1. 导入 CSV

  2. 将其存储在数组中

  3. 基于映射数组使用新列设置数组

  4. 粘贴到工作表

     Sub ImportCsv()
         'load the source file based on user input to an array
         Dim filename As String, Data
         filename = Application.GetOpenFilename
         Data = openfile(filename)
    
         'spitting first line to get nr of columns
         Dim cls, Data2, j As Long, i As Long, newcls
         cls = Split(Data(1, 1), ";")
    
         'Re-Order columns - You can just change to nr according to your mapping => first column mapped to col 5 etc...
         newcls = Array(5, 3, 10, 14, 8, 6, 13, 19, 18, 9, 22)
    
         'Setup reformated array, make sure the Ubound of columns corresponds to the max col in your mapping
         ReDim Data2(1 To UBound(Data), 1 To 22)
         For j = 1 To UBound(Data, 1)
             cls = Split(Data(j, 1), ";")
             For i = 1 To UBound(cls)
                 Data2(j, newcls(i)) = Trim(cls(i - 1))
             Next i
         Next j
    
         'paste to sheet
         Worksheets("Sheet1").Range("A1").Resize(UBound(Data2), UBound(Data2, 2)).Value2 = Data2
     End Sub
    
     Private Function openfile(filename As String) As Variant
         'import External
         Dim wbExt As Workbook, Data, FilePath As String
         'FilePath = Application.ActiveWorkbook.Path & filename => alternative if you just ask a filename to the user. this will set the path.
         Set wbExt = Workbooks.Open(filename:=filename) 'replace filename with filepath if you choose above approach
         With wbExt: Data = .Sheets(1).UsedRange.Value: .Close: End With 'get data from source and close
         openfile = Data 'send array back to main sub
     End Function
    

祝你好运,

【讨论】:

  • 非常感谢您理解我,它在 csv 格式下工作得非常好,但如果可能的话,可以直接从记事本到 excel 中完成。非常感谢。
  • 嗨拉胡尔,我不明白你的问题。
  • 嗨,请从下面的链接drive.google.com/file/d/109MZsujuCXyEEvroARVHvTqV5w5k0W6F/…下载下面的记事本文本
  • 这个记事本的数据带有多余的空格。如果可能的话,您能否仅提供代码,通过该代码我可以将原始所有文本数据直接导入到 excel 中,而无需从记事本文本文件中添加任何额外空格。请忽略我最初上传的内容。
  • 只需告诉我,当我单击按钮时,它将加载所有数据,所有文本文件数据从 A 列到依此类推,直到文件末尾,也没有多余的空格。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-15
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 2010-11-17
相关资源
最近更新 更多