C# 有没有办法访问标准的数字格式字符串,比如;N02";?

C# 有没有办法访问标准的数字格式字符串,比如;N02";?,c#,formatting,excel-interop,C#,Formatting,Excel Interop,在数据网格中,我显示的是使用标准格式字符串“N02”格式化的数值。当我将这些数据导出到excel时,我希望将excel列的格式设置为相同的格式。有没有办法计算当前语言环境的“N02”格式并获得实际的格式字符串 如果没有,我想我必须尝试使用当前NumberFormat的NumberNegativePattern、NumberGroupSizes、NumberGroupSeparator和NumberCimalSeparator属性重新构建它,但我真的不希望我的语言环境/文化比我的语言环境/文化更好

在数据网格中,我显示的是使用标准格式字符串“N02”格式化的数值。当我将这些数据导出到excel时,我希望将excel列的格式设置为相同的格式。有没有办法计算当前语言环境的“N02”格式并获得实际的格式字符串

如果没有,我想我必须尝试使用当前NumberFormat的NumberNegativePattern、NumberGroupSizes、NumberGroupSeparator和NumberCimalSeparator属性重新构建它,但我真的不希望我的语言环境/文化比我的语言环境/文化更好

这是我要为Excel互操作调用设置的内容:

((范围)excelSheet.Columns[columnLetter+:“+columnLetter,Type.Missing])NumberFormat=xxxxx

对于“N”和“N02”,我都想要xxxxx,我知道我可以这样使用: #,###0.00;-#,###0.00表示“N02”
但是这使得整个事情都是文化特有的。

这里的问题有两个方面;首先,在使用数字样式时,Excel interop只公开了一组非常有限的功能。其次,Excel本身很少关注特定于区域性的格式

例如,在Open XML standard For Excel中,所有内置的数字格式样式都是硬编码的(请参见第2128页)。尽管根据用户的区域设置使用不同的样式,但Excel不会像.NET Framework的全球化功能那样注意用户区域设置中的任何覆盖。即使将标准数字格式字符串与其Excel等效字符串(按区域)结合起来,由于Windows中的区域设置,格式仍可能不同

正如flindeberg在他们的评论中提到的那样,将单元格值格式化为文本是确保数字在.NET中格式化的唯一方法,这就是数字在Excel中的显示方式


由于您工作的局限性,我建议您在生成电子表格时针对不变的文化,而不是尝试对每种文化进行专门化。通过遵循不变区域性的规则,您可以非常轻松地编写一个算法,将标准数字格式字符串转换为扩展形式,以便与Excel一起使用。

最终产品的用途是什么?excel工作表最后是否包含数字或字符串有关系吗?如果(cell!=null&&IsNumeric(cell))cell=String.Format(“{0:N02}”,cell),则Does
foreach(表中的var cell)(伪代码)解决它?字符串化是我所知道的将excel格式控制到这种程度的唯一方法。。但另一方面,我不是excel com专业人士:我相当肯定,当您通过编程设置excel的NumberFormat时,您总是使用不变的格式,而不管文化背景如何。文化识别字符串仅在通过Excel UI设置NumberFormat时使用。谢谢伙计们-我需要它在Excel中保持一个格式化的数字而不是字符串,因此将使用不变格式方法感谢Bradley的出色回答-在这种格式方面没有什么是简单的。那我就用不变文化的方法。