2017-08-08 74 views
0

我在此看到一些问题(如this one),询问如果Excel中的单元格可以按照NPOI/POI格式化,就好像formatted by Excel。和大多数人一样,我必须处理货币和日期时间问题。在这里,让我问一下如何通过Excel格式化来实现格式化? (我会回答这个问题,我自己来演示如何做到这一点。)NPOI:实现货币格式,就好像格式化为Excel

设置:视窗10,英语,地区:台湾 Excel格式:XLSX(2007版及更高版本)

(抱歉各种编辑。这个问题我已经按了“确认”按钮,在意想不到的时间)

回答

2

如果格式化单元作为货币的,您有4种选择:Excel Currency Format

每个款式的内部格式如下:

  1. -NT $ 1,234.10
    < numFmt formatCode = “” NT $ “#,## 0.00” numFmtId = “164”/>

  2. [RED] NT $ 1,234.10
    < numFmt formatCode = “” NT $ “#,## 0.00; [红色]” NT $ “#,## 0.00” numFmtId = “164”/>

  3. -NT $ 1,234.10
    < numFmt formatCode = “” NT $“#, ## 0.00 _);(“NT $”#,## 0.00)“numFmtId =”“/>

  4. [RED] -NT $ 1,234.10
    < numFmt formatCode = “” NT $ “#,## 0.00 _); [红色](” NT $ “#,## 0.00)” numFmtId =” “/>

注意:在NT $之前和之后有一对双引号(”)。

(要获得XLSX的内部格式,只需将其解压缩形式信息是可用<解压目录> \ XL \ Styles.xml看看这个answer如果您需要了解更多信息。)

(供参考:在formatCode中,'0'代表一个数字,'#'代表一个数字,但如果数字不够大,则不会出现,所以任何少于1000的数字都不会有逗号。'_'在格式3中,'1.75'显示为'NT $ 1.75',最后一个是空格。)

(供参考:在numFmtId中,对于案例1和案例2,编号164是fo r用户定义的。对于情况3和4,7号和8是build-in style。)

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

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

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

将此格式应用于带编号的单元格。一旦你打开Excel结果文件,右键点击检查格式,你会看到第一个选择。

请随时评论这篇文章。