使用C# DataTable写入Excel时,保留8位小数不显示的问题
解决C#通过DataTable导出Excel时decimal类型8位小数不显示的问题
核心问题:Excel默认的「常规」单元格格式会自动省略数值末尾的0,即使DataTable中存储的是保留8位小数的decimal,也会被Excel自动格式化显示。修改DataColumn的DataType只能保证数据存储类型,无法控制Excel的显示格式。
解决方案:设置Excel单元格的数字格式
根据你使用的Excel导出库,选择对应方式设置固定8位小数的格式:
1. 使用EPPlus库(主流开源库)
直接给目标列设置数字格式字符串"0.00000000":
// 假设ws是ExcelWorksheet实例,注意EPPlus的列索引从1开始,对应DataTable的第6列(索引6) ws.Columns[7].Style.Numberformat.Format = "0.00000000";
2. 使用NPOI库
创建单元格样式并绑定到目标单元格:
// 初始化样式 var cellStyle = workbook.CreateCellStyle(); var dataFormat = workbook.CreateDataFormat(); cellStyle.DataFormat = dataFormat.GetFormat("0.00000000"); // 遍历DataRow写入Excel时,给对应单元格应用样式 foreach (DataRow dr in dt.Rows) { var excelRow = sheet.CreateRow(sheet.LastRowNum + 1); var targetCell = excelRow.CreateCell(6); // 对应DataTable的第6列 targetCell.SetCellValue((decimal)dr[6]); targetCell.CellStyle = cellStyle; }
3. 若使用GridView导出(Web场景)
在GridView的绑定列中设置DataFormatString:
<asp:BoundField DataField="YourDecimalColumnName" DataFormatString="{0:N8}" HtmlEncode="False" HeaderText="数值" />
验证数据本身的正确性
先确认DataTable中的值确实保留了8位小数:
// 输出到控制台验证 Console.WriteLine(dr[6].ToString("N8"));
如果输出是124.73000000,说明数据存储没问题,只需调整Excel的显示格式即可。
内容的提问来源于stack exchange,提问作者Cloud9
相关产品推荐
相关产品推荐

