我有一张Epplus生成的excel表,我遇到了一些痛点,我希望由一个解决了类似挑战的人指导。 我需要将数字格式应用于double值,我想将它呈现在这样的excel中。
这是我的代码
ws.Cells[row, col].Style.Numberformat.Format = "##0.0";
最终的excel文件总是将E + 0附加到此格式的末尾,因此会显示最终值。
当我检查生成的Excel工作表的格式单元格时,我看到我的格式显示为## 0.0E + 2而不是我应用的## 0.0。 可能有什么问题?
答案 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
}