Excel 中的数字格式不适用于 EPPlus
Posted
技术标签:
【中文标题】Excel 中的数字格式不适用于 EPPlus【英文标题】:Numberformatting in Excel doesn't work with EPPlus 【发布时间】:2015-09-17 09:42:33 【问题描述】:之前使用过 COM Interop Excel 并遇到同样的问题,已解决 here。我现在面临与 EPPlus 库(版本 4.0.4.0)相同的问题。
这段代码应该格式化输出文件中的数字:
for (int i = 10; i > 27; i += 4)
//worksheetOut.Cells[String.Format("0:1", i, i + 1)].Style.Numberformat.Format = null;
worksheetOut.Cells[String.Format("0:1", i, i + 1)].Style.Numberformat.Format = "€###.###.###";
给this result
我不知道如何使用上面列出的问题中的解决方案,看到设置此格式的“唯一”方法是通过字符串,所以我无法添加文化设置。
编辑:
显然您不能在整行上放置数字格式。 我试过这段代码:
//range with only numbers, so no empty values or 'General' values
worksheetOut.Cells["A18:F19"].Style.Numberformat.Format = "###.###.###";
给出this result,我认为我不能将小数分隔符更改为,
,将千位分隔符更改为.
【问题讨论】:
你从来没有提到,是的问题是什么? 您无法更改分隔符,这是影响数字显示方式方式的 Excel 用户设置。事实上,您的格式字符串是错误的,可能会被忽略 -.
是特定于文化的小数 占位符。在某些文化中,它是.
,在其他文化中,它将呈现为,
。如果要指定千位占位符,请使用 €###,###,###
,如果要限制小数,请使用 €###,###,###.##
您为什么不 (a) 在一次性工作簿中使用 Excel 设置您想要的格式; (b) 检查生成的NumberFormat.Format
属性; (c) 在你的代码中使用这个值。
链接的问题与 Excel 无关(它与 String.Format 相关),如果它似乎有效,那是因为 Excel 用户与您的应用程序或 Excel 使用的语言环境相同将单元格值视为文本,而不是数字。
@Panagiotis Kanavos,在我之前的问题中,可以更改文化设置,并给了我想要的结果(虽然这是在 COM interop Excel 中)。我想这在 EPPlus 中是不可能的?我已经阅读了最后一条评论,我明白为什么那不可能了。
在另一个问题中,没有指定数字格式,值被视为文本。在这种情况下,指定了数字格式(尽管无效),这意味着这些值将被视为 数字。如果您尝试更改用户帐户的区域设置,您会发现 Excel 将以不同的方式显示千位和小数
【参考方案1】:
应该是我认为(从最后删除格式)
worksheetOut.Cells[String.Format("0:1", i, i + 1)].Style.NumberFormat= "€###.###.###";
【讨论】:
更改为 NumberFormat以上是关于Excel 中的数字格式不适用于 EPPlus的主要内容,如果未能解决你的问题,请参考以下文章
LabelHandle 上的 canShrink 属性不适用于使用 BIRT 的 PDF 和 EXCEL 报告