EPPlus号码格式


72

我有一个用Epplus生成的Excel工作表,我遇到了一些痛点,我希望由解决类似挑战的人指导。

我需要将数字格式应用于双精度值,并且要像这样在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我应用的格式。

有什么问题吗?


## 0.0用于货币格式。“ 0.00”代表数字格式
Richa Garg,2016年

Answers:


157

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

//integer (not really needed unless you need to round numbers, Excel will use default cell properties)
ws.Cells["A1:A25"].Style.Numberformat.Format = "0";

//integer without displaying the number 0 in the cell
ws.Cells["A1:A25"].Style.Numberformat.Format = "#";

//number with 1 decimal place
ws.Cells["A1:A25"].Style.Numberformat.Format = "0.0";

//number with 2 decimal places
ws.Cells["A1:A25"].Style.Numberformat.Format = "0.00";

//number with 2 decimal places and thousand separator
ws.Cells["A1:A25"].Style.Numberformat.Format = "#,##0.00";

//number with 2 decimal places and thousand separator and money symbol
ws.Cells["A1:A25"].Style.Numberformat.Format = "€#,##0.00";

//percentage (1 = 100%, 0.01 = 1%)
ws.Cells["A1:A25"].Style.Numberformat.Format = "0%";

//accounting number format
ws.Cells["A1:A25"].Style.Numberformat.Format = "_-$* #,##0.00_-;-$* #,##0.00_-;_-$* \"-\"??_-;_-@_-";

不要将小数和千位分隔符更改为您自己的本地化。Excel将为您做到这一点。

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

//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";

日期时间格式是否有任何类似的参考。我正在尝试读取格式为dd-mm-yy h:mm的文件,但是在调试中,我看到的格式为:“ [$ -10409] m / d / yyyy \\ h:mm:ss \\ AM / PM”
分段错误

1
添加了一些示例,但基本上它的作用与数字相同。
VDWWD

1
Nvm,找到它。不仅要使用符号,还必须转义多个字符。对于瑞士法郎,它可能看起来像这样:_ \"CHF\" * # ##0.00_ ;_ \"CHF\" * -# ##0.00_ ;_ \"CHF\" * \"-\"??_ ;_ @_
UeliDeSchwert

2
Don't change the decimal and thousand separators to your own localization. Excel will do that for you.那!尝试“修复”小数是错误和破坏公式的巨大来源!
Panagiotis Kanavos '18年

6
如果你想格式化您的细胞功能,可以设置Style.Numberformat.Format = "@";
质谱点网

2

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

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

0

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

因此,请确保使用Valuenullable的实际值。


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
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.