首页 > 解决方案 > Excel VBA将文本文件导入excel并将特定列转换为文本

问题描述

我目前正在处理一项任务,这只是通过 VBA 将文本文件导入到 excel 中。

问题是我想编写一个 VBA 代码,仅将变量“数字”转换为文本格式,在导入文本文件时其他变量没有变化,因此,导入后第一个数字“0”将保留进入excel。

下面是示例,但文本文件实际上包含了 100 多个变量,录制宏似乎不适用于那么多变量。

文本文件:

数据日期|型号|状态|状态时间戳|编号|xxx

2021-02-02|投资者|批准|2020-09-25 15:54:58|0312475|asdfasfsdf

2021-02-02|投资者|批准|2020-04-23 23:01:30|0312475|asdfasfsdf

2021-02-02|中等|已批准|2020-09-28 16:49:48|0312475|asdfasfsdf

请查看并提供建议。非常感谢。

因为我想要导入包含 100 多个变量的文本文件但仅将变量“数字”转换为文本的代码。谢谢。

Workbooks.OpenText Filename:=fdata & intxt1, _
    Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, _
    ConsecutiveDelimiter:=False, Tab:=False, _
    Semicolon:=False, Comma:=False, Space:=False, _
    Other:=True, OtherChar:="|", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 2), Array(6, 1)),
    TrailingMinusNumbers:=True, _
    Local:=True

标签: vbatxt

解决方案


如果您只需要以文本形式打开特定列,那么创建一个直到该特定列的数组就足够了,例如FieldInfo. 如果该特定列是 100 列,那么编写这样一个数组数组应该会更加困难。在这种情况下,您可以使用下一个代码,自动构建必要的数组:

Sub importTextFormatOneCol()
   Dim fileToOpen As String, arr(), i As Long, colsNo As Long, colString As Long
   
   colsNo = 100: colString = 5
   ReDim arr(colsNo - 1)
   For i = 0 To UBound(arr)
        Select Case i
            Case colString - 1 'here it can be an enumeration of cases (-1 because of base zero array)
            'Case 4, 10, 21 ' in such a chase, the columns 5, 11, 22 will be formatted As Text
                arr(i) = Array(i + 1, 2)
            Case Else
                arr(i) = Array(i + 1, 1)
        End Select
   Next i
   Workbooks.OpenText fileName:=fdata & intxt1, _
          origin:=932, startRow:=1, DataType:=xlDelimited, _
         TextQualifier:=xlDoubleQuote, Other:=True, OtherChar:="|", FieldInfo:=arr()
End Sub

可以改进代码以自动确定要打开的文本文件中的实际列数。并不复杂,但它并不构成问题的对象。


推荐阅读