【问题标题】:c# - Is there any way to access the standard numeric format strings like "N02"?c# - 有没有办法访问像“N02”这样的标准数字格式字符串?
【发布时间】:2012-06-12 04:59:31
【问题描述】:

在数据网格中,我正在显示使用标准格式字符串格式化的数值,在本例中为“N02”。当我将此数据导出到 excel 时,我想将 excel 列的格式设置为相同。有没有办法评估当前语言环境的“N02”格式并获取实际的格式字符串?

如果没有,我想我必须尝试使用​​当前 NumberFormat 的 NumberNegativePattern、NumberGroupSizes、NumberGroupSeparator 和 NumberDecimalSeparator 属性来重建它,但我真的不喜欢我的机会比我的地区/文化。

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

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

我希望“N”和“N02”都使用 xxxxx,我知道我可以使用这样的东西: "#,##0.00;-#,##0.00" 对于 "N02" 但这使整个事情变得特定于文化。

【问题讨论】:

  • 最终产品的用途是什么? excel表格最后是否包含数字或字符串有关系吗? foreach (var cell in sheet) if (cell != null && IsNumeric(cell)) cell = String.Format("{0:N02}", cell);(伪代码)能解决吗?字符串化是我所知道的在这种程度上控制 excel 格式的唯一方法。但另一方面,我不是 excel-com-pro :P
  • 我很确定,当您以编程方式设置 Excel 的 NumberFormat 时,无论文化如何,您始终使用不变格式。文化感知字符串仅在通过 Excel UI 设置 NumberFormat 时使用。
  • 谢谢大家 - 我需要它在 excel 中保持一个格式化的数字而不是一个字符串,所以将采用不变的格式方法

标签: c# formatting excel-interop


【解决方案1】:

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

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

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

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

【讨论】:

  • 感谢 Bradley 的出色回答 - 就这种格式而言,没有什么是简单的。那么我将采用不变的文化方法。
猜你喜欢
  • 1970-01-01
  • 2015-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多