EPPlus数字格式

时间:2016-10-24 01:42:45

标签: c# asp.net .net excel epplus

我有一张Epplus生成的excel表,我遇到了一些痛点,我希望由一个解决了类似挑战的人指导。 我需要将数字格式应用于double值,我想将它呈现在这样的excel中。

  • 8 - > 8.0
  • 12 - > 12.0
  • 14.54 - > 14.5
  • 0 - > 0.0

这是我的代码

ws.Cells[row, col].Style.Numberformat.Format = "##0.0";

最终的excel文件总是将E + 0附加到此格式的末尾,因此会显示最终值。

  • 8 - > 8.0E + 0
  • 12 - > 12.0E + 0
  • 14.54 - > 14.5E + 0
  • 0 - > 000.0E + 0

当我检查生成的Excel工作表的格式单元格时,我看到我的格式显示为## 0.0E + 2而不是我应用的## 0.0。 可能有什么问题?

4 个答案:

答案 0 :(得分:95)

以下是EPPlus的一些数字格式选项:

//default DateTime pattern
worksheet.Cells["A1:A25"].Style.Numberformat.Format = DateTimeFormatInfo.CurrentInfo.ShortDatePattern;

//custom DateTime pattern
worksheet.Cells["A1:A25"].Style.Numberformat.Format = "dd-MM-yyyy HH:mm";
  

请勿将小数和千位分隔符更改为您自己的分隔符   本土化。 Excel会为你做到这一点。

通过请求一些DateTime格式化选项。

{{1}}

答案 1 :(得分:2)

已接受答案的附加内容,因为值为“接受对象”,因此您必须将数字传递给“值”,例如,如果您输入的内容为字符串:

var input = "5";    
ws.Cells["A1:A25"].Value = double.Parse(input);

答案 2 :(得分:0)

可接受的答案的另一种补充:您可以使用可为空的值,并且格式设置看起来都不错,但最终它在Excel中成为字符串,而您不能求和,AVG等。

因此请确保使用可为空的实际Value

答案 3 :(得分:0)

如果您想将“ B”列之类的特定列格式化为数字格式,则可以采用这种方式-

using (var package = new ExcelPackage())
{
  var worksheet = package.Workbook.Worksheets.Add("SHEET1");
  worksheet.Cells["A1"].LoadFromDataTable(dataTable, PrintHeaders: true);
  for (var col = 1; col < dataTable.Columns.Count + 1; col++)
  {
    if (col == 2)//col number 2 is equivalent to column B
    {
      worksheet.Column(col).Style.Numberformat.Format = "#";//apply the number formatting you need
    }
    worksheet.Column(col).AutoFit();
  }
  return File(package.GetAsByteArray(), XlsxContentType, "report.xlsx");//downloads file
}