NPOI:实现货币格式,就像使用Excel格式化一样

时间:2017-08-08 09:57:12

标签: excel formatting xlsx npoi

我在这里看到了一些问题(例如this one),询问是否可以通过NPOI / POI格式化Excel中的单元格,就像formatted by Excel一样。大多数人,我必须处理货币和DateTime的问题。这里让我问一下格式化是如何实现的,好像它已经被Excel格式化了? (我将自己回答这个问题,以证明如何做到这一点。)

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

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

1 个答案:

答案 0 :(得分:3)

如果将单元格格式化为货币,则有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; [Red]" NT $"#,## 0.00" numFmtId =" 164" />

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

  4. [RED] -NT $ 1,234.10
    < numFmt formatCode ="" NT $"#,## 0.00 _); [红色](" NT $"#,## 0.00)&#34 ; numFmtId ="的 8 " />

  5. 注意:在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结果文件后,右键单击以检查格式,您将看到第一个选择。

    请随时评论这篇文章。