代码之家  ›  专栏  ›  技术社区  ›  Teasel Minakshi

工作手册。打开显示两种不同的格式

  •  2
  • Teasel Minakshi  · 技术社区  · 6 年前

    我在阅读两篇文章的内容时遇到了一个问题。带有VBA的CSV文件。这两个文件的结构如下:

    <Column 1>    <Column 2>    <Column 3>
    <Data 1.1>    <Data 2.1>    <Data 3.1>
    <Data 1.2>    <Data 2.2>    <Data 3.2>
    <Data 1.3>    <Data 2.3>    <Data 3.3>
    

    当我使用 Workbooks.Open(Filename:=FILEPATH, ReadOnly:=True) 但是我在文件中没有得到相同的格式。

    这是我在第一个文件中读到的内容:所有内容都在第1列中,并用分号分隔。

    <           Column 1           >
    <Data 1.1>;<Data 2.1>;<Data 3.1>
    <Data 1.2>;<Data 2.2>;<Data 3.2>
    <Data 1.3>;<Data 2.3>;<Data 3.3>
    

    这是我在第二个文件中读到的:一切正常。

    <第1列(>)<第2列(>)<第3列(>);
    <数据1.1><数据2.1><数据3.1>
    <数据1.2><数据2.2><数据3.2>
    <数据1.3><数据2.3><数据3.3>
    

    我希望打开这两个文件,并以同样的方式读取这两个文件中的数据。我做错了什么?这是我的代码还是其中一个。CSV文件?

    代码段

    Public Sub openCSVFiles()
    
        Dim openWb1 As Workbook
        Dim openWb2 As Workbook
    
        Set openWb1 = Workbooks.Open(Filename:=FILEPATH_1, ReadOnly:=True, Delimiter:=";")
        Set openWb2 = Workbooks.Open(Filename:=FILEPATH_2, ReadOnly:=True, Delimiter:=";")
    
        'Cell A2 contains <Data 1.1>
        For Each dataRow In openWb1.Sheets(1).Range("A1:C3")
            Debug.Print dataRow
        Next dataRow
    
        'Cell A2 contains <Data 1.1>;<Data 2.1>;<Data 3.1>
        For Each dataRow In openWb2.Sheets(1).Range("A1:C3")
            Debug.Print dataRow
        Next dataRow
    
        openWb1.Close False
        openWb2.Close False
    End Sub
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   shash    6 年前

    通常,当您面临这样的问题时,第一步是使用记事本快速浏览文件。一旦您知道分隔符是什么,请根据需要使用以下分隔符之一

    1. 将Split()函数与分隔符一起使用
    2. 仅需要打印/显示时使用Replace()函数
    3. 打开时定义分隔符- https://msdn.microsoft.com/en-us/vba/excel-vba/articles/workbooks-open-method-excel
    4. 将“文本到列”与VBA一起使用- https://msdn.microsoft.com/en-us/vba/excel-vba/articles/range-texttocolumns-method-excel
        2
  •  1
  •   Teasel Minakshi    6 年前

    如果您遇到相同的问题,这可能是一个解决方案。问题是分隔符不同,为了避免这个问题,我们必须在打开文件时指定分隔符。

    'Replace this
    Set openWb1 = Workbooks.Open(Filename:=FILEPATH_1, ReadOnly:=True)
    Set openWb2 = Workbooks.Open(Filename:=FILEPATH_2, ReadOnly:=True
    
    'By this
    Set openWb1 = Workbooks.Open(Filename:=FILEPATH_1, _
                                 ReadOnly:=True, _
                                 Delimiter:=YourDelimiterHere)
    
    Set openWb2 = Workbooks.Open(Filename:=FILEPATH_2, _
                                 ReadOnly:=True, _
                                 Delimiter:=YourDelimiterHere)
    

    我指定了 Delimiter 论点 You can find more information about it here