如何在Excel VBA中以编程方式在Workbooks.OpentText上定义FieldInfo参数?
Workbooks.OpenText方法使用名为FieldInfo的参数来确定每列中的格式类型。例如,下面的代码将打开一个文本文件,并为第1列和第2列提供文本格式,为第3列提供常规格式如何在Excel VBA中以编程方式在Workbooks.OpentText上定义FieldInfo参数?,vba,excel,Vba,Excel,Workbooks.OpenText方法使用名为FieldInfo的参数来确定每列中的格式类型。例如,下面的代码将打开一个文本文件,并为第1列和第2列提供文本格式,为第3列提供常规格式 Workbooks.OpenText fileName:="C:\somefile.txt", _ FieldInfo:=Array(Array(1, 2), Array(2, 2), Array(3, 1)) 假设在运行时,我确定文本文件有4列,第2列和第4列应该是文本。如何以编程方式将其传入?根据:
Workbooks.OpenText fileName:="C:\somefile.txt", _
FieldInfo:=Array(Array(1, 2), Array(2, 2), Array(3, 1))
假设在运行时,我确定文本文件有4列,第2列和第4列应该是文本。如何以编程方式将其传入?根据:
FieldInfo可选,变量
包含单个数据列的分析信息的。解释取决于数据的价值。当数据为时,此参数是由两个元素数组组成的数组,每个两个元素数组指定特定列的转换选项
第一个元素是基于列编号1的,并且,
第二个元素是指定如何解析列的常量之一。
XlColumnDataType枚举
根据您的数据,如果第2列和第4列应为文本,则应为:
Array(2,2)
Array(4,2)
FieldInfo:=Array(Array(1,1), Array(2,2), Array(3,1),Array(4,2))
您没有指定第1列和第3列,因此如果它们是常规的,那么整个数组将是:
Array(2,2)
Array(4,2)
FieldInfo:=Array(Array(1,1), Array(2,2), Array(3,1),Array(4,2))
…或者,为了清楚起见,您可以使用:
FieldInfo:=Array( _
Array(1,xlGeneralFormat), _
Array(2,xlTextFormat), _
Array(3,xlGeneralFormat), _
Array(4,xlTextFormat) _
)
笔记:
列说明符可以是任意顺序。如果输入数据中没有特定列的列说明符,则使用常规设置解析该列
如果源数据具有固定宽度的列,则每个两元素数组中的第一个元素将起始字符在列中的位置指定为整数;字符0是第一个字符。双元素数组中的第二个元素将列的parse选项指定为0到9之间的数字,如上表所示
更多信息:
MSDN:
MSDN:
根据报告:
FieldInfo可选,变量
包含单个数据列的分析信息的。解释取决于数据的价值。当数据为时,此参数是由两个元素数组组成的数组,每个两个元素数组指定特定列的转换选项
第一个元素是基于列编号1的,并且,
第二个元素是指定如何解析列的常量之一。
XlColumnDataType枚举
根据您的数据,如果第2列和第4列应为文本,则应为:
Array(2,2)
Array(4,2)
FieldInfo:=Array(Array(1,1), Array(2,2), Array(3,1),Array(4,2))
您没有指定第1列和第3列,因此如果它们是常规的,那么整个数组将是:
Array(2,2)
Array(4,2)
FieldInfo:=Array(Array(1,1), Array(2,2), Array(3,1),Array(4,2))
…或者,为了清楚起见,您可以使用:
FieldInfo:=Array( _
Array(1,xlGeneralFormat), _
Array(2,xlTextFormat), _
Array(3,xlGeneralFormat), _
Array(4,xlTextFormat) _
)
笔记:
列说明符可以是任意顺序。如果输入数据中没有特定列的列说明符,则使用常规设置解析该列
如果源数据具有固定宽度的列,则每个两元素数组中的第一个元素将起始字符在列中的位置指定为整数;字符0是第一个字符。双元素数组中的第二个元素将列的parse选项指定为0到9之间的数字,如上表所示
更多信息:
MSDN:
MSDN:
您可以在运行时构建FieldInfo数组
Private Function GetFieldInfo(nFields as Integer)
Dim colInfo(1 to nFields, 1 to 2)
For i = 1 to nFields
colInfo(i,1) = i
If (i = 2) Or (i = 4) Then
' Text format for columns 2 and 4
colInfo(i,2) = xlTextFormat
Else
colInfo(i,2) = xlGeneralFormat
End If
Next i
GetFieldInfo = colInfo
End Function
Workbooks.OpenText fileName:="C:\somefile.txt", FieldInfo:=GetFieldInfo(4)
中有一个类似的答案。您可以在运行时构建FieldInfo数组
Private Function GetFieldInfo(nFields as Integer)
Dim colInfo(1 to nFields, 1 to 2)
For i = 1 to nFields
colInfo(i,1) = i
If (i = 2) Or (i = 4) Then
' Text format for columns 2 and 4
colInfo(i,2) = xlTextFormat
Else
colInfo(i,2) = xlGeneralFormat
End If
Next i
GetFieldInfo = colInfo
End Function
Workbooks.OpenText fileName:="C:\somefile.txt", FieldInfo:=GetFieldInfo(4)
在这里有一个类似的答案。2K确切地说,恭喜证明。。现在,我必须通过向上投票来破坏这个漂亮的整数…太棒了,谢谢-我需要一个解决方案,能够将一个大于350的单个字段设置为文本,以避免看起来像数字的东西被转换成科学符号2K。祝贺你,证明。。现在我必须通过向上投票来破坏这个漂亮的整数…太棒了,谢谢-我需要一个解决方案,能够将一个大于350的字段设置为文本,以避免看起来像数字的东西被转换为科学符号