NPOI:实现货币格式,就好像由 Excel 格式化一样

NPOI: Achieve Currency format as if formatted by Excel

我看到了一些问题(比如) here asking about if a cell in Excel can be formatted by NPOI/POI as if formatted by Excel。和你们大多数人一样,我必须处理Currency和DateTime的问题。这里让我问一下如何实现格式化就像已经格式化一样by Excel?(我会自己回答这个问题来演示如何做。)

设置:Windows10,英文,地区:台湾 Excel 格式:XLSX(2007 及更高版本)

(很抱歉对这个问题进行了各种编辑,因为我在意外的时间按下了 'Enter' 按钮。)

如果您将单元格格式化为货币,您有 4 个选择:

各样式内部格式如下:

  1. -1,234.10新台币

  2. [RED]1,234.10新台币

  3. -1,234.10新台币

  4. [RED]-NT$1,234.10

注意:NT$前后有一对双引号(")。

(要获取 XLSX 的内部格式,只需将其解压缩。样式信息可在 <解压缩目录>\xl\Styles 中找到。xml 如果您需要更多信息,请查看此 answer信息。)

(仅供参考:在formatCode中,'0'代表一个数字。'#'也代表一个数字,但如果数字不够大则不会出现。所以任何小于1000的数字里面不会有逗号。'_' 是 space 持有者。在格式 3 中,'1.75' 显示为 'NT.75 '。最后一个是 space。)

(仅供参考:在numFmtId中,对于case 1和case 2,数字164是用户自定义的。对于case 3和4,数字7和8是build-in style。)

对于使用 POI/NPOI 的开发者,您可能会发现如果您使用 Build In Format 使用 0x7 或 0x8 格式化您的货币列,您只能得到第三或第四个选择。您无法获得第一或第二选择。

要获得第一个选择,您需要在样式 0x7 "$#,##0.00);($#,##0.00)" 的基础上构建。您需要在其前面添加货币符号和一对双引号

styleCurrency.DataFormat = workbook.CreateDataFormat().GetFormat("\"NT$\"#,##0.00");

将此格式应用于带数字的单元格。打开 Excel 结果文件后,右键单击以检查格式,您将看到第一个选项。

请随时对此发表评论 post。