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

4
我有一个使用Interop.Excel功能编写的C#项目。方法Worksheet.SaveAs("file.csv", ...)在与项目构建的.NET Framework版本相关时工作方式不同。
  • 当编译为.NET Framework 3.5时,该方法将使用分号(;)作为分隔符保存CSV文件(这就是我需要的)。
  • 当编译为.NET Framework 4时,它会使用逗号(,)作为分隔符,但代码没有任何其他更改。
请问有人能解释发生了什么事吗? 如何强制Excel始终在CSV文件中使用分号作为分隔符,而不受目标.NET Framework的影响?

你可能想要在控制面板的区域设置中检查列表分隔符的值。它被设置为什么? - Harsh
更新怎么样? - Falco Alexander
2个回答

0

您可以像这样为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;

你需要一个完整的解决方案还是像这样的提示? - Falco Alexander

0
根据this链接,当使用Workbook.SaveAs时,“Local”变量可以正常工作,但是在尝试保存特定工作表(如Worksheet(2).SaveAs)时,它总是使用逗号作为分隔符。
因此,创建一个新的Workbook并将数据复制到其中应该可以解决问题:
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接