我正在尝试使用C#和ClosedXML将数据输入到Excel工作表中。我已经找到了我要找的大多数东西,但是我在获取ClosedXML来处理小数位数以及四舍五入时遇到了一些问题。

我目前正在使用cell.Style.NumberFormat.NumberFormatId = 10;为了使该单元格显示一个具有2个小数位的百分率,我只想显示1个小数位,而wiki for ClosedXML 仅显示0个或2个小数位的百分数。

接下来,当我不使用ClosedXML并直接添加数据时,Excel会将小数点后一位四舍五入,但是当我使用ClosedXML输入数据时,单元格不会四舍五入,有没有办法强制ClosedXML为我四舍五入,或者执行我需要手动执行此操作吗?

最佳答案

看来您可能必须根据此SO答案编写自己的自定义NumberFormatId:https://stackoverflow.com/a/7900397/541208,或者,在 ClosedXML docs中,它说要添加一个新的Style:

var workbook = new XLWorkbook();
var ws = workbook.Worksheets.Add("Style NumberFormat");

var co = 2;
var ro = 1;

// Using a custom format
ws.Cell(++ro, co).Value = "123456.789";
ws.Cell(ro, co).Style.NumberFormat.Format = "$ #,##0.00";

ws.Cell(++ro, co).Value = "12.345";
ws.Cell(ro, co).Style.NumberFormat.Format = "0000";

// Using a OpenXML's predefined formats
ws.Cell(++ro, co).Value = "12.345";
ws.Cell(ro, co).Style.NumberFormat.NumberFormatId = 3;

ws.Column(co).AdjustToContents();

workbook.SaveAs("StylesNumberFormat.xlsx");

因此,您的自定义NumberFormat将类似于基于默认格式listed here:0.0%
ws.Cell(ro, co).Style.NumberFormat.Format = "0.0%";

10-01 17:52