ClosedXML 无法将单元格数据类型设置为带有长整数的数字格式 - v0.95.4.0

ClosedXML cannot set cell data tyep to Number format with a long - v0.95.4.0

大家好,我的第一个问题!

我正在使用 ClosedXML(转到 Excel 的绝佳解决方案)并且一切似乎都按规定工作,但 making/formatting 单元格到数字除外。 起初我虽然它可能与值有关(由于数字的大小它很长)所以我将代码添加到 test 如果它是否是数字,验证部分有效美好的。 代码生成没有错误,但是当我之后查看电子表格时,单元格仍然设置为常规而不是数字??
所以我最终在电子表格中得到了(在 Excel 中键入 General)“1.04804E+11”。

这是帮助我解决错误的代码:-)

var stringNumber = dataGridDrivePerf.Rows[r].Cells[i].Value;
long numericValue;
if (long.TryParse((string)stringNumber, out numericValue))
{
    ws.Cell(r + 2, i + 1).SetValue(numericValue);
    ws.Cell(r + 2, i + 1).SetDataType(XLDataType.Number);
}
else
{
    ws.Cell(r + 2, i + 1).Value = dataGridDrivePerf.Rows[r].Cells[i].Value;
}  

欢迎来到 SO。

ClosedXML 应该自己正确设置数据类型。 但那是 Excel 不是你想要达到的目标。

您想将值格式化为数字,因此 Excel 中的下拉菜单甚至称为数字格式。 在代码中,这是通过修改单元格样式来完成的。

以下应该适合您:

var stringNumber = dataGridDrivePerf.Rows[r].Cells[i].Value;
long numericValue;
if (long.TryParse((string)stringNumber, out numericValue))
{
    ws.Cell(r + 2, i + 1).SetValue(numericValue);
    ws.Cell(r + 2, i + 1).Style.NumberFormat.Format = "#,##0;[Red]-#,##0"; # <-- this line to format
}
else
{
    ws.Cell(r + 2, i + 1).Value = dataGridDrivePerf.Rows[r].Cells[i].Value;
}

编辑:修正错别字