【问题标题】:Convert Excel file with commas to CSV VBA将带逗号的 Excel 文件转换为 CSV VBA
【发布时间】:2016-02-10 02:06:57
【问题描述】:

我有一个需要使用 Excel VBA 将其转换为 CSV 的 excel 文件。

所以我得到了以下代码:

Sub REPORT()
    Dim ColNum As Integer 
    Dim Line As String 
    Dim LineValues() As Variant 
    Dim OutputFileNum As Integer 
    Dim PathName As String 
    Dim rowNum As Integer

    'Create CSV file
    PathName = Application.ActiveWorkbook.Path OutputFileNum = FreeFile

    Open PathName & "\" & "Myfile" & ".csv" For Output Lock Write As #OutputFileNum

    SheetValues = ActiveSheet.UsedRange

    Range("A1").CurrentRegion.Select

    With ActiveSheet.UsedRange
        numbercolumns = .Columns.Count
    End With

    ReDim LineValues(1 To numbercolumns)

    For rowNum = 1 To last
        For ColNum = 1 To numbercolumns
            LineValues(ColNum) = SheetValues(rowNum, ColNum)
        Next
        Line = Join(LineValues, ",")
        Print #OutputFileNum, Line
    Next

    Close OutputFileNum
End Sub

我的问题是 Excel 文件的任何单元格中都有逗号。发生这种情况时,宏会将单元格一分为二,并将一部分移至下一列,覆盖数据。

非常感谢

【问题讨论】:

    标签: excel vba csv


    【解决方案1】:

    首先并且可能最简单的方法是在加入之前删除所有逗号:

    For rowNum = 1 To last
      For ColNum = 1 To numbercolumns
        LineValues(ColNum) = Replace(SheetValues(rowNum, ColNum), ",", "")
      Next
      Line = Join(LineValues, ",")
      Print #OutputFileNum, Line
    Next     
    

    另一种选择可能是用“;”分隔 csv 文件或未包含在所用数据中的任何其他字符。
    最终,您可以用其他东西(例如“#”或其他不太可能使用的字符)替换逗号,并在读取文件时恢复它,当然假设文件是​​以您可以控制的某种方式读取的。

    【讨论】:

    • 但是为什么单元格中有逗号?如果这是小数分隔符,则 CSV 应使用“;”而不是值之间的“,”。如果逗号在字符串中,值应该用双引号括起来。无需更改实际内容
    • 嗨,如果将“,”替换为“#”,如何在创建 csv 时将其还原?
    【解决方案2】:

    你看过原生函数吗?

    ActiveSheet.SaveAs Filename:=PathName & "\" & "Myfile" & ".csv", FileFormat:=xlCSV, CreateBackup:=False
    

    它可以正确地转义包含带双引号的逗号的单元格

    【讨论】:

      【解决方案3】:

      最简单的方法是将要附加的内容用引号引起来 - 您可以使用 Char(34)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-04-01
        • 2018-04-03
        • 2016-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-03
        相关资源
        最近更新 更多