使用VBA导入分号分隔的CSV文件,而不重命名为txt

时间:2018-06-18 16:02:25

标签: vba methods delimiter

这不是重复的,因为我想要一个解决方案,不能将文件重新格式化为txt:

我打算用分号作为分隔符打开一个csv文件。为此,我使用了以下代码:

Sub prueba2()


Dim sfile As String
Dim wb As Workbook
Dim Path As String
Dim Namefile As String


Path = "V:\evfilesce9i9\apps9\vbe9\dep4\KFTP\KFTP001D_FicherosCeca"
Namefile = "\QryCECARFSECTORIAL0239*.txt"


Set wb = Workbooks.Open(Filename:=Path & Namefile, Delimiter:=";")

End Sub

当我尝试它时,使用逗号作为分隔符打开它而不是我指定的分号(分号)

我在其他问题中已经读到这在2006年后的Excel版本中是正常的,并且最快的解决方案是将文件重新格式化为txt。

这不符合我的需要,因为我必须在不改变格式的情况下这样做。我找不到任何解决方案。

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

请参阅MS文档here

我认为你想使用Format参数,而不是delimiter参数。

尝试:

Set wb = Workbooks.Open(Filename:=Path & Namefile, Format:=4)

似乎只有在Format设置为6时才使用Delimiter参数,这表示自定义分隔符。分号是标准分隔符。

修改

嗯......所以,这似乎是Excel / VBA中一段时间​​的棘手问题。

经过一些研究后,“格式”选项只能在打开.txt文件时使用。这就是“重新格式化文件到.txt”的原因之一。

然而,有些事情可以做。

如果文件的第一行是:Excel将处理打开分号分隔文件:

sep=;

我知道你说你无法重新格式化文件,但这是你可以做的事情吗?

如果没有,我建议的下一步是:1)使用Open Statement打开你的文件,然后将其写入临时文件(可能是.txt),重新打开原始的Workbooks.Open(格式:= 4),或2)编写自己的文本导入器。可以在this stackoverflow页面中找到示例文本导入程序。

Sub ImportCSVFile(filepath As String)
    Dim line As String
    Dim arrayOfElements
    Dim linenumber As Integer
    Dim elementnumber As Integer
    Dim element As Variant

    linenumber = 0
    elementnumber = 0

    Open filepath For Input As #1 ' Open file for input
        Do While Not EOF(1) ' Loop until end of file
            linenumber = linenumber + 1
            Line Input #1, line
            arrayOfElements = Split(line, ";")

            elementnumber = 0
            For Each element In arrayOfElements
                elementnumber = elementnumber + 1
                Cells(linenumber, elementnumber).Value = element
            Next
        Loop
    Close #1 ' Close file.
End Sub