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,234.10新台币
[RED]1,234.10新台币
-1,234.10新台币
[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。
我看到了一些问题(比如
设置:Windows10,英文,地区:台湾 Excel 格式:XLSX(2007 及更高版本)
(很抱歉对这个问题进行了各种编辑,因为我在意外的时间按下了 'Enter' 按钮。)
如果您将单元格格式化为货币,您有 4 个选择:
各样式内部格式如下:
-1,234.10新台币
[RED]1,234.10新台币
-1,234.10新台币
[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。