【问题标题】:Workbooks.OpenText ignoring FieldInfo column parameterWorkbooks.OpenText 忽略 FieldInfo 列参数
【发布时间】:2019-03-13 21:06:48
【问题描述】:

我有下面一行来导入一个 csv 格式的文件。

 Workbooks.OpenText Filename:=sPath, DataType:=xlDelimited, Comma:=True, FieldInfo:=Array(Array(18, 5), Array(19, 5)), Local:=True

根据微软的文档here,如果FieldInfo 是分隔的,则不必按任何顺序排列。

列说明符可以是任何顺序。如果没有专栏 输入数据中特定列的说明符,该列是 使用常规设置解析。

然而,无论我在第一个参数Array(Array(x, 5), Array(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"

【问题讨论】:

  • 该行只是为我打开了 CSV 文件...打开后你想做什么?
  • 该行应打开 CSV,但还将第 18 列和第 19 列格式化为日期 MDY。为了使问题更加明显,您可以尝试 Array(18, 9), Array(19, 9),它不应该导入这 2 列,但它禁用的只是第 1 列和第 2 列。
  • 非常有趣 - 我现在正在研究这个。顺便说一句,值 5 是“YMD”格式,值 3 是 MDY。
  • 看看这个帖子here,这可能有助于解释发生了什么......

标签: excel vba


【解决方案1】:

我能够使用.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 列(Test1Test2):

documentation 明确表示“列说明符可以按任何顺序排列”,但这看起来不正确。第一个数组的第一个元素将始终为第 1 列,第二个数组的第一个元素将始终为第 2 列,并且在迭代所有数组之后,其余列将使用 General 设置进行解析。

IMO,这对我来说似乎是一个错误。如果它不是一个错误,那么文档就会非常混乱,需要重新编写。

【讨论】:

    【解决方案2】:

    这确实看起来像一个错误或文档具有误导性。避免丑陋代码的一种解决方法是导入文本文件而不对其进行分隔并使用TextToColumns 将其拆分。类似的东西(奇怪的是似乎有效):

    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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-26
      • 2011-07-03
      • 2011-12-01
      • 2016-04-21
      • 2013-06-14
      • 2015-05-13
      相关资源
      最近更新 更多