使用VBA在Excel中打开CSV会导致数据显示在两列而不是一列中

qmb5sa22  于 2022-12-15  发布在  其他
关注(0)|答案(6)|浏览(260)

我在Excel 2007/2010中创建了VBA代码,用于从CSV文件导入数据。不幸的是,当我以编程方式打开文件时,对于某些数据行,数据被拆分为两列(A和B)。
当我手动打开CSV文件时,一切显示正常!
CSV数据通常如下所示(标题行示例):
“特巴科”;“TBSAIS”;“TBSKU9“;“TBSMOD”;“平板电脑”;“TBKBNR“;“TBBEZ2“;“TBFAR2
“;“三苯磺GC”;“三苯磺GC”;“TBEINK“;“TBKBGR“;“TBKBGF“;“TBVKPE“;“三苯甲酮“;“三苯甲酮
“;“土巴湾”;“土巴湾”;“土耳其”;“土耳其斯坦”;“特布卢人”;“特布卢人”;“TBERDT“;“TBDATV“;“TBDATB“
导致问题的数据在文本中包含逗号。以下是一个示例:
JEAN 5袋可伸展+1,60 M
下面是代码:

Private Sub OpenCSV(x As Integer, wkbDashboard As String, wkbCsvImport As String, wksDestination As Worksheet)
' Opens CSV and copies data to current workbook
Dim wkbCsvImportName As String
Dim r As Range

Workbooks(wkbDashboard).Activate

' Open and read CSV
Workbooks.Open Filename:=wkbCsvImport, Format:=xlDelimited, Delimiter:=";"
wkbCsvImportName = ActiveWorkbook.Name

问题截图。红色的东西在打开文件后的B列。

hwamh0ep

hwamh0ep1#

添加Local:=True作为Workbooks.Open中的参数
希望这可能会有帮助!

tjvv9vkg

tjvv9vkg2#

我仍然怀疑这是因为扩展名是CSV。如果你把文件重命名为.txt会发生什么?

dgtucam1

dgtucam13#

要导入带有非逗号分隔符的数据,应将Format属性设置为6,以便能够定义delimiter,如here所述。如果直接将Format设置为4,也应该可以使用

qcuzuvrc

qcuzuvrc4#

我认为当你手动操作时,Excel会将分隔符读取为“;“而且不仅仅是;。
试试这个:

Workbooks.Open Filename:=wkbCsvImport, Format:=xlDelimited, Delimiter:=""";"""

编辑:
唯一的方法我可以得到这个工作是通过改变文件扩展名从csv到txt,然后运行以下代码:

Workbooks.OpenText Filename:=wkbCsvImport, _
                    DataType:=xlDelimited, semicolon:=True
c2e8gylq

c2e8gylq5#

我知道两种可能的解决方法:
1)将扩展名从.csv更改为例如.xxx,并按如下方式打开它:

Workbooks.OpenText fileName:="file.xxx", _
Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:=1, _
ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, _
Comma:=False, Space:=False, Other:=False, OtherChar:="", _
TrailingMinusNumbers:=True, Local:=True

如果您使用.csv.xls,则excel将使用操作系统中的默认值覆盖设置。
2)在Windows 10中,将您的区域设置从English - United States更改为English - United Kingdom。奇怪的是,这有帮助,高级日期/时间中的分隔符设置是什么并不重要。在Windows 7中,我认为分隔符设置起作用了。

ct3nt3jp

ct3nt3jp6#

将单元格格式更改为文本。例如,单元格(1,1)。NumberFormat =“@”

相关问题