NPOI:像Excel格式化一样实现货币格式
在这里,我看到了一些问题(比如这个问题),询问如果Excel中的单元格可以通过NPOI / POI进行格式化,就像使用Excel格式化一样 。 和大多数人一样,我必须处理货币和date时间问题。 这里让我问一下,如何格式化可以实现,如果它已被格式化为Excel? (我会自己回答这个问题来演示如何去做。)
设置:Windows 10,英语,地区:台湾Excel格式:XLSX(版本2007及更高版本)
(对不起,关于这个问题的各种编辑,因为我已经在意想不到的时间按下了“回车”button。)
如果您将单元格设置为“货币”,则有四种select:
每种风格的内部格式如下:
-
-NT $ 1,234.10
<numFmt formatCode =“”NT $“#,## 0.00”numFmtId =“164”/> -
[红色] NT $ 1,234.10
<numFmt formatCode =“”NT $“#,## 0.00; [Red]”NT $“#,## 0.00”numFmtId =“164”/> -
-NT $ 1,234.10
<numFmt formatCode =“”NT $“#,## 0.00 _);(”NT $“#,## 0.00)”numFmtId =“ 7 ”/> -
[红色] -NT $ 1,234.10
<numFmt formatCode =“”NT $“#,## 0.00 _); [Red](”NT $“#,## 0.00)”numFmtId =“ 8 ”/>
注意:NT $前后有一对双引号(“)。
(要获取XLSX的内部格式,只需将其解压缩即可。样式信息可在<unzip dir> \ xl \ Styles.xml中find,如果需要更多信息,请查看此答案 。
(仅供参考:在formatCode
,'0'代表一个数字,'#'代表一个数字,但是如果数字不够大则不会出现,所以小于1000的数字不会有逗号。 '_'是一个空格,在格式3中,'1.75'显示为'NT $ 1.75',最后一个空格。
(FYI:在numFmtId
,对于情况1和情况2,数字164是用户定义的;对于情况3和4,数字7和8是内置样式) 。
对于使用POI / NPOI的开发人员,您可以使用0x7或0x8来了解如果使用Build In Format格式化货币列,则只能得到第三个或第四个选项。 你不能得到第一个或第二个select。
为了得到第一个select,你build立在样式0x7 "$#,##0.00);($#,##0.00)"
。 您需要在其前面添加货币符号和双引号 。
styleCurrency.DataFormat = workbook.CreateDataFormat().GetFormat("\"NT$\"#,##0.00");
将此格式应用于具有编号的单元格。 一旦你打开Excel结果文件,右键点击检查格式,你会看到第一个select。
请随时评论这个职位。