我在这里看到了一些问题(例如this one),询问是否可以通过NPOI / POI格式化Excel中的单元格,就像formatted by Excel一样。大多数人,我必须处理货币和DateTime的问题。这里让我问一下格式化是如何实现的,好像它已经被Excel格式化了? (我将自己回答这个问题,以证明如何做到这一点。)
设置:Windows 10,英文,地区:台湾 Excel格式:XLSX(2007及更高版本)
(很抱歉这个问题的各种编辑,因为我在意外的时间按下了'Enter'按钮。)
答案 0 :(得分:3)
每种风格的内部格式如下:
-NT $ 1,234.10
< numFmt formatCode ="" NT $"#,## 0.00" numFmtId =" 164" />
[RED] 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 强>" />
[RED] -NT $ 1,234.10
< numFmt formatCode ="" NT $"#,## 0.00 _); [红色](" NT $"#,## 0.00)&#34 ; numFmtId ="的 8 强>" />
注意:在NT $之前和之后有一对双引号(")。
(要获取XLSX的内部格式,只需将其解压缩。样式信息可在< unzip dir> \ xl \ Styles.xml中找到。如果您需要更多信息,请查看此answer。)
(仅供参考:在formatCode
中,' 0'代表一个数字。'#'也代表一个数字,但如果数字不是,则不会显示因此,任何小于1000的数字都不会在其中包含逗号。' _'是一个空格持有者。在格式3中,' 1.75'显示为' NT $ 1.75'。最后一个是空格。)
(仅供参考:在numFmtId
中,对于案例1和案例2,编号164用于用户定义。对于案例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结果文件后,右键单击以检查格式,您将看到第一个选择。
请随时评论这篇文章。