使用C# datatable将十进制值舍入到8位,并写入Excel

dz6r00yl  于 2023-11-20  发布在  C#
关注(0)|答案(1)|浏览(176)

我试图用C#中的datatable将十进制值舍入到8位。
没有错误,但Excel中的输出不显示8位小数。
我试过网上的很多方法,但到目前为止都没有效果。
我尝试设置数据列类型。

dt.Columns[6].DataType = typeof(decimal);

dr[6] = decimal.Round(Convert.ToDecimal(inpRow[20]), 8);

字符串


的数据



Excel中的输出,如果值为124.73,则输出应为124.73000000

eufgjt7s

eufgjt7s1#

OP确实提到了下面这行,Excel是如何生成的

wb.Worksheets.Add(dt, "Securities transaction upload");

字符串
这让我相信OP使用的是ClosedXML,请参阅他们的github页面中的以下示例
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;
}

相关问题