C# NPOI导出数值格式设置(货币) HSSFDataFormat.getBuiltinFormat(“#,##0.00“)

C#使用NPOI设置Excel数值格式为货币
本文介绍了在C#中利用NPOI库导出Excel时,如何设置单元格格式为货币类型,包括理解预设格式的数字代码以及避免设置为文本格式的问题,以确保数据正确导出。

系统单元格格式预设值:

S/No.

Format 

VlaueS/No

Format

Value 
1General012h:mm AM/PM0x12
20113h:mm:ss AM/PM0x13
30.00214h:mm0x14
4#,##0315h:mm:ss0x15
5#,##0.00416m/d/yy h:mm0x16
6($#,##0_);($#,##0)517(#,##0_);[Red](#,##0)0x26
7($#,##0_);[Red]($#,##0)618(#,##0.00_);(#,##0.00)0x27
8($#,##0.00);($#,##0.00)719(#,##0.00_);[Red](#,##0.00)0x28
9($#,##0.00_);[Red]($#,##0.00)820_(*#,##0_);_(*(#,##0);_(* \"-\"_);_(@_)0x29
100%921_($*#,##0_);_($*(#,##0);_($* \"-\"_);_(@_)0x2a
110.00%0xa22_(*#,##0.00_);_(*(#,##0.00);_(*\"-\"??_);_(@_)0x2b
120.00E+000xb23_($*#,##0.00_);_($*(#,##0.00);_($*\"-\"??_);_(@_)0x2c
13# ?/?0xc24mm:ss0x2d
14# ??/??0xd25[h]:mm:ss0x2e
15m/d/yy0xe26mm:ss.00x2f
16d-mmm-yy0xf27##0.0E+00x30
17d-mmm0x1028@-This is text format.0x31
18mmm-yy0x1129text-Alias for "@"0x31

//创建数字单元格样式
IFont numFont = hSSFWorkbook.CreateFont();
numFont.FontName = "宋体";
numFont.FontHeightInPoints = 10;
numStyle = hSSFWorkbook.CreateCellStyle();
numStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
numStyle.BottomBorderColor = HSSFColor.Black.Index;
numStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
numStyle.LeftBorderColor = HSSFColor.Black.Index;
numStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
numStyle.RightBorderColor = HSSFColor.Black.Index;
numStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
numStyle.TopBorderColor = HSSFColor.Black.Index;
numStyle.Alignment = HorizontalAlignment.Right;
numStyle.SetFont(numFont);
//货币千分位保留两位小数
numStyle.DataFormat = 4;
//numStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("#,##0.00");

        最初的时候没有看懂numStyle.DataFormat = 4是啥意思,查阅了一些资料后才发现,很多写法如下:        

numStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("#,##0.00");

NLogHelper.WriteLog("numStyle格式", "¥#,##0 -> " + HSSFDataFormat.GetBuiltinFormat("¥#,##0"), LogLevel.Warn);
NLogHelper.WriteLog("numStyle格式", "#,##0 -> " + HSSFDataFormat.GetBuiltinFormat("#,##0"), LogLevel.Warn);
NLogHelper.WriteLog("numStyle格式", "#,##0.00 -> " + HSSFDataFormat.GetBuiltinFormat("#,##0.00"), LogLevel.Warn);
NLogHelper.WriteLog("numStyle格式", "$#,##0.00 -> " + HSSFDataFormat.GetBuiltinFormat("$#,##0.00"), LogLevel.Warn);
NLogHelper.WriteLog("numStyle格式", "(#,##0.00_);(#,##0.00) -> " + HSSFDataFormat.GetBuiltinFormat("(#,##0.00_);(#,##0.00)"), LogLevel.Warn);

输出结果:

        2021-07-26 15:06:49.8224 numStyle格式 ¥#,##0 -> -1
        2021-07-26 15:06:49.8224 numStyle格式 #,##0 -> 3
        2021-07-26 15:06:49.8224 numStyle格式 #,##0.00 -> 4
        2021-07-26 15:06:49.8224 numStyle格式 $#,##0.00 -> -1
        2021-07-26 15:06:49.8224 numStyle格式 (#,##0.00_);(#,##0.00) -> -1       

        后来通过打印日志,才发现,原来这个的返回值正是4,同直接设置 numStyle.DataFormat 的值 = 4效果一样,如果获取不到对应的格式,返回-1。在结合官方文档中各种预设好的格式的值,最后才明白后边value的含义。直接设置值有一个好处,就是不会出现取不到格式值的情况,如果设置为-1,导出的时候就会报错。但是直接设置,往往让不知道的小伙伴看到之后非常迷茫,不知道这个4是干啥的,所以最好注释一下。

        有了对应的格式,设置值的时候也要注意下,不要设置成文本格式,传参的时候用double。

double val = 0;
double.TryParse(item[Convert.ToString(dr["field"])].ToString(), out val);
rowContent.CreateCell(k).SetCellValue(val);
rowContent.GetCell(k).CellStyle = numStyle;

        导出效果: 

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

轩小川

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值