提问人:Cloud9 提问时间:11/10/2023 最后编辑:marc_sCloud9 更新时间:11/10/2023 访问量:87
使用 c# 数据表将四舍五入到 8 位的十进制值写入 Excel
Writing decimal value with round to 8 places using c# datatable into Excel
问:
我正在尝试使用 datatable 将四舍五入到 8 位的十进制值写入 C# 中的 Excel。
没有错误,但 Excel 中的输出不显示小数点后 8 位。
我尝试了互联网上的许多建议,但到目前为止没有任何效果。
我尝试设置数据列类型。
dt.Columns[6].DataType = typeof(decimal);
dr[6] = decimal.Round(Convert.ToDecimal(inpRow[20]), 8);
Excel中的输出,如果值为,则输出应为。124.73
124.73000000
答:
0赞
Rand Random
11/10/2023
#1
OP 确实提到了以下行,excel 是如何生成的
wb.Worksheets.Add(dt, "Securities transaction upload");
这让我相信 OP 正在使用 ,请参阅他们的 github 页面中的以下示例ClosedXML
https://github.com/ClosedXML/ClosedXML/wiki/Adding-DataTable-as-Worksheet
如果正确,则可以添加以下行以设置类型为 .decimal
for (var index = 0; index < dataTable.Columns.Count; index++)
{
var dataTableColumn = dataTable.Columns[index];
if (dataTableColumn.DataType != typeof(decimal))
continue;
var rangeWithHeader = ws.Column(index + 1).AsRange().RangeUsed();
var rangeWithoutHeader = ws.Range(rangeWithHeader.FirstCell().CellBelow(), rangeWithHeader.LastCell());
rangeWithoutHeader.Style.NumberFormat.Format = "#0.00000000";
}
完整样本:
static void Main(string[] args)
{
var wb = new XLWorkbook();
var dataTable = GetTable("Information");
// Add a DataTable as a worksheet
var ws = wb.Worksheets.Add(dataTable);
for (var index = 0; index < dataTable.Columns.Count; index++)
{
var dataTableColumn = dataTable.Columns[index];
if (dataTableColumn.DataType != typeof(decimal))
continue;
var rangeWithHeader = ws.Column(index + 1).AsRange().RangeUsed();
var rangeWithoutHeader = ws.Range(rangeWithHeader.FirstCell().CellBelow(), rangeWithHeader.LastCell());
rangeWithoutHeader.Style.NumberFormat.Format = "#0.00000000";
}
wb.SaveAs("AddingDataTableAsWorksheet.xlsx");
}
static DataTable GetTable(String tableName)
{
DataTable table = new DataTable();
table.TableName = tableName;
table.Columns.Add("Dosage", typeof(int));
table.Columns.Add("Drug", typeof(string));
table.Columns.Add("Patient", typeof(string));
table.Columns.Add("Date", typeof(DateTime));
table.Columns.Add("Dec", typeof(decimal));
table.Rows.Add(25, "Indocin", "David", DateTime.Now, 123m);
table.Rows.Add(50, "Enebrel", "Sam", DateTime.Now, 123.4m);
table.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now, 123.45m);
table.Rows.Add(21, "Combivent", "Janet", DateTime.Now, 123.456m);
table.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now, 123.4567m);
return table;
}
评论
StringFormat
DataTable
I don't want to convert into string..
- 我再次谈论 DISPLAY,显示的内容最终将归结为一个字符串。十进制/日期时间等,如果显示是一个字符串 - 所以每次你显示一个值时,它都会被格式化为一个字符串,例如。datetime 格式为 MM.dd.yyyy 或 MM.dddd.yy 或 ...-这是您必须进行更改的地方,您必须声明如何显示十进制值 - 在Excel单元格中,只需更改数字格式即可。