在我通过C#调用Workbook.Save()之后,在MS Excel中打开一个分号分隔的文件。此外,分号将替换为逗号

在我通过C#调用Workbook.Save()之后,在MS Excel中打开一个分号分隔的文件。此外,分号将替换为逗号,excel,csv,office-interop,excel-addins,Excel,Csv,Office Interop,Excel Addins,我在MS Excel 2013中开发C#Addin时有一种奇怪的行为。 我的客户打开带有分号分隔符的CSV文件 现在,他可以单击我的一个加载项按钮。其中一个按钮将调用“Application.ActiveWorkbook.Save()”以保存对文件的更改 调用后,MS Excel将用逗号替换所有分号! 如果在Excel API中找不到解决此错误的解决方案 当我通过MS Excels blue disc保存文件时,不会进行替换 为什么? 有人能帮我吗 提前谢谢 -- Markus如果CSV文件的标

我在MS Excel 2013中开发C#Addin时有一种奇怪的行为。 我的客户打开带有分号分隔符的CSV文件

现在,他可以单击我的一个加载项按钮。其中一个按钮将调用“Application.ActiveWorkbook.Save()”以保存对文件的更改

调用后,MS Excel将用逗号替换所有分号! 如果在Excel API中找不到解决此错误的解决方案

当我通过MS Excels blue disc保存文件时,不会进行替换

为什么?

有人能帮我吗

提前谢谢

--
Markus

如果CSV文件的标准格式是分号,您可以尝试

ActiveWorkbook.SaveAs Filename:="text.csv", FileFormat:=xlCSV, CreateBackup:=False, local:=True
local:=True将使用您环境中正常使用的delimeter

如果不起作用,可以尝试直接使用vba创建csv文件

根据您的需要调整以下代码(位于)


非常感谢。但在代码中创建CSV文件不是一个选项。用户打开一个现有文件,更改它,然后单击我们的加载项按钮。如果用户打开了XLSX文件,那么使用Excel工作簿.save()命令保存更改也没有问题。..@Sukram但是如果用户单击按钮,则仅调用“Application.ActiveWorkbook.save()”或使用我的较长代码保存打开的CSV之间没有区别。只需将“SaveAs”中的虚拟名称替换为ActiveWorkbook.name&“.csv”,当然这是一个解决方案。但是没有其他办法解决这个问题吗?为什么原生Excel API工作簿.Save()替换分号?我认为这是因为原生Excel(VBA部分)是为“英语”环境设计的,并且在CSV(逗号分隔值)文件中使用逗号。如果要在vba中输入公式,还必须使用逗号而不是分号。是否可以更改vba语言?
Sub CreateCSV()

    Dim rCell As Range
    Dim rRow As Range
    Dim sOutput As String
    Dim sFname As String, lFnum As Long

    'Open a text file to write
    sFname = "C:\MyCsv.csv"
    lFnum = FreeFile

    Open sFname For Output As lFnum
    'Loop through the rows'
        For Each rRow In ActiveSheet.UsedRange.Rows
        'Loop through the cells in the rows'
        For Each rCell In rRow.Cells
            sOutput = sOutput & rCell.Value & ";"
        Next rCell
         'remove the last comma'
        sOutput = Left(sOutput, Len(sOutput) - 1)

        'write to the file and reinitialize the variables'
        Print #lFnum, sOutput
        sOutput = ""
     Next rRow

    'Close the file'
    Close lFnum

End Sub