是否可以使用vba打开以固定列分隔且大小不同的文本文件

是否可以使用vba打开以固定列分隔且大小不同的文本文件,vba,excel,Vba,Excel,我有许多文本文件,它们首先通过vba打开,然后进行处理。然而,我的所有文本文件都是固定长度分隔的。唯一的问题是每个文件的列大小不同 FieldInfo:=Array(Array(0, 1), Array(6, 1), Array(11, 1), Array(46, 1), Array(51, 1), Array(57, 1), Array(71, 1), Array(79, 1), Array(86, 1), Array(96, 1), Array(100, 1), Array(107, 1),

我有许多文本文件,它们首先通过vba打开,然后进行处理。然而,我的所有文本文件都是固定长度分隔的。唯一的问题是每个文件的列大小不同

FieldInfo:=Array(Array(0, 1), Array(6, 1), Array(11, 1), Array(46, 1), Array(51, 1), Array(57, 1), Array(71, 1), Array(79, 1), Array(86, 1), Array(96, 1), Array(100, 1), Array(107, 1), Array(114, 1), Array(123, 1), Array(132, 1), Array(141, 1)), TrailingMinusNumbers:=True
另一个可能是:

FieldInfo:=Array(Array(0, 1), Array(7, 1), Array(22, 1), Array(77, 1), Array(141, 1)), TrailingMinusNumbers:=True
但是,如果我手动执行此操作,Excel总是独立于文件建议正确的数组


是否可以让Excel建议这些数组,或者至少以其他方式获得这些数组?

我假设您正在使用
工作簿.OpenText
方法打开文件,例如:

Workbooks.OpenText Filename:="C:\Temp\myFile.txt", _
                   Origin:=xlWindows, _
                   StartRow:=1, _
                   DataType:=xlFixedWidth, _
                   FieldInfo:=Array(Array(0, 1), Array(6, 1), Array(11, 1), Array(46, 1), Array(51, 1), Array(57, 1), Array(71, 1), Array(79, 1), Array(86, 1), Array(96, 1), Array(100, 1), Array(107, 1), Array(114, 1), Array(123, 1), Array(132, 1), Array(141, 1)), _
                   TrailingMinusNumbers:=True
如果是这样,您只需删除
FieldInfo
参数并强制Excel自行猜测:

Workbooks.OpenText Filename:="C:\Temp\myFile.txt", _
                   Origin:=xlWindows, _
                   StartRow:=1, _
                   DataType:=xlFixedWidth, _
                   TrailingMinusNumbers:=True

我假设您正在使用
工作簿.OpenText
方法打开文件,例如:

Workbooks.OpenText Filename:="C:\Temp\myFile.txt", _
                   Origin:=xlWindows, _
                   StartRow:=1, _
                   DataType:=xlFixedWidth, _
                   FieldInfo:=Array(Array(0, 1), Array(6, 1), Array(11, 1), Array(46, 1), Array(51, 1), Array(57, 1), Array(71, 1), Array(79, 1), Array(86, 1), Array(96, 1), Array(100, 1), Array(107, 1), Array(114, 1), Array(123, 1), Array(132, 1), Array(141, 1)), _
                   TrailingMinusNumbers:=True
如果是这样,您只需删除
FieldInfo
参数并强制Excel自行猜测:

Workbooks.OpenText Filename:="C:\Temp\myFile.txt", _
                   Origin:=xlWindows, _
                   StartRow:=1, _
                   DataType:=xlFixedWidth, _
                   TrailingMinusNumbers:=True

FieldInfo
是否在整个文件中有效,或者文件的前几行由10(分隔)列组成,然后文件更改为11或8列?是的,在同一文件中,FieldInfo是相同的。但是每个文件都有它自己的结构。嗯,那我就不太明白了。使用各种不同的方法将文本文件导入Excel的web解决方案不计其数(
Line Input
with
Split
select
with
ADO
.QueryTables.Add
)。之后,Excel通常会根据其内容自动格式化单元格。我遗漏了什么?如何确定每个文件的结构?@h2so4哦,现在我明白了。似乎我一直错过了
固定宽度
,而不是
分隔的
。但这只会让打洞容易得多。只需使用上述任何方法将整个文本文件复制到列
A
,然后使用
工作表(1).Range(“A1:A500”).TextToColumns数据类型:=xlFixedWidth
。由于您没有传递任何
FieldInfo
Excel将为您决定,并且(我猜)这是OP想要的,因为在过去Excel已经决定正确。
FieldInfo
是否在整个文件中有效,或者是否会发生文件的前几行由10行(带分隔符)组成的情况列,然后文件更改为11列或8列?是的,在同一文件中,FieldInfo是相同的。但是每个文件都有它自己的结构。嗯,那我就不太明白了。使用各种不同的方法将文本文件导入Excel的web解决方案不计其数(
Line Input
with
Split
select
with
ADO
.QueryTables.Add
)。之后,Excel通常会根据其内容自动格式化单元格。我遗漏了什么?如何确定每个文件的结构?@h2so4哦,现在我明白了。似乎我一直错过了
固定宽度
,而不是
分隔的
。但这只会让打洞容易得多。只需使用上述任何方法将整个文本文件复制到列
A
,然后使用
工作表(1).Range(“A1:A500”).TextToColumns数据类型:=xlFixedWidth
。由于您没有传递任何
FieldInfo
Excel将为您决定,并且(我猜)这是OP想要的,因为在过去,Excel已决定正确。我尝试过这样做,但Excel猜测的字段信息与之前猜测的字段信息不同。这导致了两个柱子的连接,而在分开之前。但这有点帮助!啊,好吧,如果Excel的猜测没有给出你想要的,那么你将不得不用艰难的方式来做,并指定你想要的特定宽度。实际上只有这两种选择——让它猜测,或者不让它猜测。我尝试过这样做,但Excel猜测的字段信息与之前猜测的字段信息不同。这导致了两个柱子的连接,而在分开之前。但这有点帮助!啊,好吧,如果Excel的猜测没有给出你想要的,那么你将不得不用艰难的方式来做,并指定你想要的特定宽度。实际上只有这两种选择——让它猜,或者不让它猜。