Excel Workbooks.OpenText忽略FieldInfo列参数
我有下面一行来导入csv格式的文件Excel Workbooks.OpenText忽略FieldInfo列参数,excel,vba,Excel,Vba,我有下面一行来导入csv格式的文件 Workbooks.OpenText Filename:=sPath, DataType:=xlDelimited, Comma:=True, FieldInfo:=Array(Array(18, 5), Array(19, 5)), Local:=True 根据microsoft的文档,如果字段信息是分隔的,则它不必按任何顺序排列 列说明符可以是任意顺序。如果没有列 输入数据中特定列的说明符,该列为 使用常规设置解析 然而,无论我在第一个参数数组(数组(
Workbooks.OpenText Filename:=sPath, DataType:=xlDelimited, Comma:=True, FieldInfo:=Array(Array(18, 5), Array(19, 5)), Local:=True
根据microsoft的文档,如果字段信息是分隔的,则它不必按任何顺序排列
列说明符可以是任意顺序。如果没有列
输入数据中特定列的说明符,该列为
使用常规设置解析
然而,无论我在第一个参数数组(数组(x,5),数组(y,5))中输入什么,excel似乎都将第一个数组视为第一列,将第二个数组视为第二列。
。因此,为了达到第18和19栏,我必须这样做,这并不漂亮:
Workbooks.OpenText Filename:=sPath, DataType:=xlDelimited, Comma:=True, _
FieldInfo:=Array(Array(1, 1), _
Array(2, 1), _
Array(3, 1), _
Array(4, 1), _
Array(5, 1), _
Array(6, 1), _
Array(7, 1), _
Array(8, 1), _
Array(9, 1), _
Array(10, 1), _
Array(11, 1), _
Array(12, 1), _
Array(13, 1), _
Array(14, 1), _
Array(15, 1), _
Array(16, 1), _
Array(17, 1), _
Array(18, 5), _
Array(19, 5)), _
Local:=True
csv文件示例数据:
fill_c1,pick_n2,po_num3,quanti4,addres5,cust_s6,color_7,size_d8,style9,shipto10,shipto11,addres12,addres13,city14,state15,zipcod16,custom17,start_18,end_da19,udford20
"52","1","2","000000001","000000000000000000000000000000","6","Z","XS","7","","","","","","","","M",20190310,20190318,"CF3"
"52","1","2","000000002","000000000000000000000000000000","6","Z","S","7","","","","","","","","M","20190310","20190318","CF3"
我能够使用
.txt
文件和Tab=True
重现这个问题:
Workbooks.OpenText Filename:=Path & "Testfile.txt", DataType:=xlDelimited, Tab:=True, FieldInfo:=Array(Array(18, 9), Array(19, 9)), Local:=True
通过使用值9(xlSkipColumn
),我试图省略第18列和第19列,但跳过了第1列和第2列(Test1
和Test2
):
for明确表示“列说明符可以是任意顺序的”,但这似乎是不正确的。第一个数组的第一个元素将始终是第1列,第二个数组的第一个元素将始终是第2列,并且在迭代所有数组之后,将使用常规设置解析其余的列
依我看,这看起来像个虫子。如果不是bug,那么文档就非常混乱,需要重新编写 这看起来确实像一个bug,或者文档有误导性。避免难看代码的一个解决方法是导入文本文件而不对其进行分隔,并使用
TextToColumns
拆分它。类似的事情(奇怪的是,这似乎起了作用):
这一行刚刚为我打开了CSV文件。。。一旦打开,你想做什么?这一行应该会打开CSV,但也会将第18列和第19列的格式设置为date MDY。为了使问题更加明显,您可以尝试Array(18,9),Array(19,9),它不应该导入这两列,但是它禁用的都是第1列和第2列。非常有趣-我现在正在研究这一点。顺便说一句,值5是“YMD”格式,值3是MDY。看看这篇文章,这可能有助于解释发生了什么。。。
Workbooks.OpenText Filename:=sPath, DataType:=xlDelimited, Comma:=False
Columns("A:A").TextToColumns Destination:=Range("A1"), _
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, _
FieldInfo:=Array(Array(18, 4), Array(19, 4))