Workbooks.Open显示两种不同的格式

时间:2018-03-09 13:50:25

标签: excel vba excel-vba

尝试使用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>

这是我在第二个文件中读到的内容:一切都保持正常。

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

我很想打开这两个文件并以相同的方式读取数据。我究竟做错了什么 ?是我的代码还是其中一个.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 个答案:

答案 0 :(得分:1)

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

'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

答案 1 :(得分:1)

通常,当您遇到此类问题时,第一步是使用记事本快速浏览一下该文件。一旦您知道分隔符是什么,请根据您的需要使用以下其中一项

  1. 将Split()函数与分隔符
  2. 一起使用
  3. 仅在需要打印/显示时使用Replace()功能
  4. 在打开时定义分隔符 - https://msdn.microsoft.com/en-us/vba/excel-vba/articles/workbooks-open-method-excel
  5. 使用&#39;文字到列&#39;与VBA - https://msdn.microsoft.com/en-us/vba/excel-vba/articles/range-texttocolumns-method-excel