c# - 有没有办法访问像“N02”这样的标准数字格式字符串?

时间:2012-06-08 05:51:30

标签: c# formatting excel-interop

在数据网格中,我显示使用标准格式字符串格式化的数值,在这种情况下为“N02”。当我将这些数据导出到excel时,我想格式化excel列。有没有办法评估当前语言环境的“N02”格式并获取实际的格式字符串?

如果没有,我想我必须尝试使用​​当前NumberFormat的NumberNegativePattern,NumberGroupSizes,NumberGroupSeparator和NumberDecimalSeparator属性重建它,但是我真的不喜欢我为我而不是我的机会区域设置/文化

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

((Range)excelSheet.Columns [columnLetter +“:”+ columnLetter,Type.Missing])。NumberFormat = xxxxx;

对于“N”和“N02”我都喜欢xxxxx,我知道我可以使用这样的东西: “#,## 0.00; - #,## 0.00”表示“N02” 但这使整个文化具体化。

1 个答案:

答案 0 :(得分:0)

这里的问题是双重的;首先,Excel interop在处理数字样式时只公开一组非常有限的功能。其次,Excel本身很少关注特定于文化的格式。

例如,在Excel的Open XML标准中,所有内置数字格式样式都是硬编码的(请参阅the ECMA standard document,第2128页)。虽然根据用户的语言环境使用了不同的样式,但Excel并未注意用户区域设置中的任何覆盖,如.NET Framework的全球化功能。即使您将标准数字格式字符串与其Excel等效项(按区域)结合,由于Windows中的区域设置,格式仍可能不同。

正如flindeberg在评论中提到的那样,将单元格值格式化为文本是唯一可以确定您的数字在.NET格式化的方式是它们在Excel中的显示方式。

由于您正在使用的限制,我建议在生成电子表格时定位不变文化,而不是尝试为每种文化进行专业化。通过坚持不变文化的规则,您可以非常轻松地编写算法将标准数字格式字符串转换为其扩展形式,以便与Excel一起使用。