excel EPPlus编号格式

gab6jxml  于 2023-04-22  发布在  其他
关注(0)|答案(5)|浏览(210)

我有一个用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
什么可能是错的?

dldeef67

dldeef671#

以下是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会为您完成这些操作。
通过请求一些日期时间格式选项。

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

cyvaqqii2#

除了接受的答案,因为value接受对象,你必须传递数字到值例如,如果你的输入是字符串:

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

643ylb083#

另一个被接受的答案:你可以使用空值和格式都看起来不错,但它最终是一个字符串在Excel中,你不能求和,平均等。
因此,请确保使用nullable的实际Value

yqyhoc1h

yqyhoc1h4#

如果你想格式化一个特定的列,如列“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
}
23c0lvtd

23c0lvtd5#

我解决了它如下,所以我只是加载模型,并根据我的模型改变,如果它是intdatetime

var li = typeof(Model)
              .GetProperties()
              .ToArray();

 using (var package = new ExcelPackage(stream))
            {
                var workSheet = package.Workbook.Worksheets.Add("Sheet1");

var i = 0;
                foreach (var c in li)
                {
                    i++;
                    if(c.PropertyType.Name == typeof(DateTime).Name || c.PropertyType.Name == typeof(DateTime?).Name)
                        workSheet.Column(i).Style.Numberformat.Format = DateTimeFormatInfo.CurrentInfo.ShortDatePattern; ;

                    if (c.PropertyType.Name == typeof(int).Name || c.PropertyType.Name == typeof(int?).Name)
                        workSheet.Column(i).Style.Numberformat.Format = "0";                    
                }

}

相关问题