Worksheet.SaveAs(“file.csv”)在.NET 3.5和.NET 4.0中的工作方式不同

我有一个用C#编写的使用Interop.Excelfunction的项目。 Worksheet.SaveAs("file.csv", ...)方法与项目构build的.NET Framework的工作方式不同。

  • 当为.NET Framework 3.5编译时,该方法使用分号( ; )作为分隔符保存CSV文件(这是我所需要的)。
  • 当为.NET Framework 4编译时,它使用逗号( , )作为分隔符,而代码中没有任何其他更改。

有人可以解释发生了什么? 而且我怎么能强制excel始终在CSV文件中使用分号作为分隔符,而与目标.NET Framework无关?

您可以像这样将某些区域设置设置为您的Excel实例,以强制如何写入CSV:

 var cI = new CultureInfo(locale); var excel = new Microsoft.Office.Interop.Excel.Application(); excel.UseSystemSeparators = false; excel.ThousandsSeparator = cI.NumberFormat.NumberGroupSeparator; excel.DecimalSeparator = cI.NumberFormat.NumberDecimalSeparator; 

根据这个链接,当您使用Workbook.SaveAs时,“Local”variables正常工作,但在尝试保存特定工作表(如Worksheet(2).SaveAs)时总是使用逗号作为分隔符。

因此,创build一个新的工作簿并将数据复制到它应该工作:

 Orig.Sheets(2).Range("A1:Q999").Copy Set Export = Workbooks.Add With Export .Worksheets(1).Range("A1").PasteSpecial (xlPasteValues) .SaveAs Filename:=Path & "\Name.csv", FileFormat:=xlCSV, Local:=True .Close SaveChanges:=False End With