【问题标题】:Import semicolon separated CSV file using VBA without rename to txt使用 VBA 导入分号分隔的 CSV 文件而不重命名为 txt
【发布时间】:2018-06-18 16:02:24
【问题描述】:

这不是重复的,因为我想要一个不包含将文件重新格式化为 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。

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

有人可以帮我吗?

【问题讨论】:

    标签: vba methods delimiter


    【解决方案1】:

    请参阅 MS 文档here

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

    试试:

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

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

    编辑:

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

    经过进一步研究,“格式”选项可能仅在打开 .txt 文件时使用。这就是为什么“将文件重新格式化为 .txt”是一种可能的解决方案。

    不过,有些事情是可以做的。

    如果文件的第一行是,Excel 将很好地处理打开一个分号分隔的文件:

    sep=;
    

    我知道您说过您无法重新格式化文件,但您可以这样做吗?

    如果不是,我建议接下来的事情是:1) 使用Open Statement 打开您的文件,然后将其写入临时文件(可能为 .txt),然后使用原始文件重新打开Workbooks.Open(Format:=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
    

    【讨论】:

    • 试过但没用。我也试过Format:= 5,它以“粗略”格式打开,而不是用逗号分隔(当我使用上面显示的代码时发生了这种情况),所以,向前迈出了一步,但我仍然不知道如何打开它直接以分号分隔符格式。
    • 我以一种更棘手的方式解决了这个问题,其中包括使用.TextToColumns 方法以分号分隔列,因为我得到了您的第一个提示,以粗略的格式打开它(而不是在逗号分隔的方式,这是我没有将格式设置为 5 时发生的情况。)。然后我使用.Close 方法和.SaveChanges := FALSE 来不永久修改我要读取数据的文件。不过,您的回答很有用。
    猜你喜欢
    • 2017-02-14
    • 2019-09-26
    • 1970-01-01
    • 2014-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    • 1970-01-01
    相关资源
    最近更新 更多