excel - 将文本文件数据提取到工作表

标签 excel vba

我想将此文本文件的列粘贴到我的工作簿中。

USAF-WBAN_ID STATION NAME                   COUNTRY                                            STATE                          LATITUDE LONGITUDE ELEVATION
------------ ------------------------------ -------------------------------------------------- ------------------------------ -------- --------- ---------
404200 99999 AL AHSA                        SAUDI ARABIA                                                                       +25.285  +049.485   +0179.2

我想提取 7 个变量(7 列)

美国空军-WBAN_ID;站名;国家;状态;纬度;经度;海拔

以下是我尝试过的几种变体,结果并不可靠。

Sub A1_StationID()

Dim vFile As Variant
Dim wbCopyTo As Workbook
Dim wsCopyTo As Worksheet
Dim wbCopyFrom As Workbook
Dim wsCopyFrom As Worksheet

Set wbCopyTo = ActiveWorkbook
Set wsCopyTo = ActiveSheet

MsgBox "Please select weather stn.txt document"

Dim vFileName

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

Application.ScreenUpdating = False

Workbooks.OpenText Filename:=vFileName, _
    Origin:=xlMSDOS, StartRow:=1, DataType:=xlFixedWidth, _
    FieldInfo:=Array(Array(0, 1), Array(13, 1), Array(44, 1), _
    Array(127, 1), Array(136, 1), Array(147, 1), Array(154, 1)), _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
    Semicolon:=False, Comma:=False, Space:=False, _
    Other:=False, TrailingMinusNumbers:=True

Set wbCopyFrom = Workbooks.Open(vFileName)

End Sub

我得到的一些输出:
enter image description here

如果我在倒数第二行代码中添加断点,我会更接近我想要的输出(列困惑)。
enter image description here

最佳答案

首先 - 出色的职位发布工作代码和可用的示例数据。

您缺少状态的数组/字段信息指定,并且最后 3 列相差约 1/2 个字符。我删除了分隔符选项,因为如果您使用的是 xlFixedWidth,它们并不重要。

改变

Workbooks.OpenText Filename:=vFileName, _
    Origin:=xlMSDOS, StartRow:=1, DataType:=xlFixedWidth, _
    FieldInfo:=Array(Array(0, 1), Array(13, 1), Array(44, 1), _
    Array(127, 1), Array(136, 1), Array(147, 1), Array(154, 1)), _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
    Semicolon:=False, Comma:=False, Space:=False, _
    Other:=False, TrailingMinusNumbers:=True

Workbooks.OpenText Filename:=vFileName, _
    Origin:=xlMSDOS, StartRow:=1, DataType:=xlFixedWidth, _
    FieldInfo:=Array(Array(0, 1), Array(13, 1), Array(44, 1), _
    Array(95, 1), Array(126, 1), Array(135, 1), Array(144, 1), Array(154, 1)), _
    TextQualifier:=xlDoubleQuote, TrailingMinusNumbers:=True

作为旁注,Excel 不太容易记住文本到列 设置,因此如果您之前搞乱了这些设置,请确保将它们设置为标准设置。

关于excel - 将文本文件数据提取到工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59457679/

相关文章:

vba - 移动到下一行重复过程vba

r - 在列超链接中创建所有行条目(R 中的 Excel 文件生成)

excel - 如何以编程方式更改 Excel 2007 图表中系列的线条颜色

vba - 我可以获得与 DateTime.Now.Ticks 等效的 VBA 吗?

excel - 从工作表调用的 Excel VBA UDF 是否可以传递除 'Range' 以外的任何 Excel VBA 对象模型类的实例?

excel - 如何在 excel 2007 vba 中以编程方式对一组形状进行分组?

excel - 如何从 VBA 代码中排除某些工作表?

windows - 在运行 Excel 之前动态设置环境变量的正确方法是什么?

VBA 调试——查看所有打开的 DAO 记录集

excel - 从 FormControl ListBox 检索值时出现运行时错误