使用 EPPlus 不使用科学记数法写入 Excel
Write to Excel without scientifc notation using EPPlus
我有一个非常简单的问题。我有一个 C# 应用程序,它执行一些数据处理,然后使用 EPPlus 输出到 excel 文件。问题是我的一些数字很长,例如,数据值可能是 20150602125320
,在 excel sheet 中变成 2.01506E+13
。我正在努力避免这种情况。将值转换为字符串是可行的,但我需要它们作为数字以在 excel 内进行进一步操作。任何人都知道我可以在没有科学记数法的情况下以原始形式保留数据的任何方法吗?谢谢!
您需要在单元格上设置 Numberformat
。在基础 XML 中,您需要设置的 NumFmtId
是 1
.
我看不到可以直接设置格式 ID 的方法,而是需要设置格式字符串。 documentation here 列出(部分)Id 和格式字符串之间的映射。在您的情况下,您似乎需要 "0"
:
private static void WriteExcelFile(string path)
{
using (var package = new ExcelPackage())
{
var workbook = package.Workbook;
var worksheet = workbook.Worksheets.Add("Sheet1");
var cell = worksheet.Cells["A1"];
cell.Value = 20150602125320;
cell.Style.Numberformat.Format = "0";
//DefaultColWidth just set so you don't end up with #######
//this is not required
worksheet.DefaultColWidth = 20;
package.SaveAs(new System.IO.FileInfo(path));
}
}
您必须设置格式字符串以匹配您要查找的内容:
[TestMethod]
public void Big_Number_Format()
{
//
var existingFile = new FileInfo(@"c:\temp\temp.xlsx");
if (existingFile.Exists)
existingFile.Delete();
using (var package2 = new ExcelPackage(existingFile))
{
var ws = package2.Workbook.Worksheets.Add("Sheet1");
ws.Cells[1, 1].Value = 20150602125320;
ws.Cells[1, 2].Value = 20150602125320;
ws.Cells[1, 1].Style.Numberformat.Format = "0";
ws.Cells[1, 2].Style.Numberformat.Format = "0.00";
package2.Save();
}
}
如果您想查看在 excel 的功能区中看到的 "built in" 格式的一般列表,您可以在此处查看它们,但您无法直接在您的应用中访问它们,因为它们是标记为 internal
:
https://github.com/JanKallman/EPPlus/blob/master/EPPlus/Style/XmlAccess/ExcelNumberFormatXml.cs#L62
/// <summary>
/// Id for number format
///
/// Build in ID's
///
/// 0 General
/// 1 0
/// 2 0.00
/// 3 #,##0
/// 4 #,##0.00
/// 9 0%
/// 10 0.00%
/// 11 0.00E+00
/// 12 # ?/?
/// 13 # ??/??
/// 14 mm-dd-yy
/// 15 d-mmm-yy
/// 16 d-mmm
/// 17 mmm-yy
/// 18 h:mm AM/PM
/// 19 h:mm:ss AM/PM
/// 20 h:mm
/// 21 h:mm:ss
/// 22 m/d/yy h:mm
/// 37 #,##0 ;(#,##0)
/// 38 #,##0 ;[Red](#,##0)
/// 39 #,##0.00;(#,##0.00)
/// 40 #,##0.00;[Red](#,##0.00)
/// 45 mm:ss
/// 46 [h]:mm:ss
/// 47 mmss.0
/// 48 ##0.0E+0
/// 49 @
/// </summary>
我有一个非常简单的问题。我有一个 C# 应用程序,它执行一些数据处理,然后使用 EPPlus 输出到 excel 文件。问题是我的一些数字很长,例如,数据值可能是 20150602125320
,在 excel sheet 中变成 2.01506E+13
。我正在努力避免这种情况。将值转换为字符串是可行的,但我需要它们作为数字以在 excel 内进行进一步操作。任何人都知道我可以在没有科学记数法的情况下以原始形式保留数据的任何方法吗?谢谢!
您需要在单元格上设置 Numberformat
。在基础 XML 中,您需要设置的 NumFmtId
是 1
.
我看不到可以直接设置格式 ID 的方法,而是需要设置格式字符串。 documentation here 列出(部分)Id 和格式字符串之间的映射。在您的情况下,您似乎需要 "0"
:
private static void WriteExcelFile(string path)
{
using (var package = new ExcelPackage())
{
var workbook = package.Workbook;
var worksheet = workbook.Worksheets.Add("Sheet1");
var cell = worksheet.Cells["A1"];
cell.Value = 20150602125320;
cell.Style.Numberformat.Format = "0";
//DefaultColWidth just set so you don't end up with #######
//this is not required
worksheet.DefaultColWidth = 20;
package.SaveAs(new System.IO.FileInfo(path));
}
}
您必须设置格式字符串以匹配您要查找的内容:
[TestMethod]
public void Big_Number_Format()
{
//
var existingFile = new FileInfo(@"c:\temp\temp.xlsx");
if (existingFile.Exists)
existingFile.Delete();
using (var package2 = new ExcelPackage(existingFile))
{
var ws = package2.Workbook.Worksheets.Add("Sheet1");
ws.Cells[1, 1].Value = 20150602125320;
ws.Cells[1, 2].Value = 20150602125320;
ws.Cells[1, 1].Style.Numberformat.Format = "0";
ws.Cells[1, 2].Style.Numberformat.Format = "0.00";
package2.Save();
}
}
如果您想查看在 excel 的功能区中看到的 "built in" 格式的一般列表,您可以在此处查看它们,但您无法直接在您的应用中访问它们,因为它们是标记为 internal
:
https://github.com/JanKallman/EPPlus/blob/master/EPPlus/Style/XmlAccess/ExcelNumberFormatXml.cs#L62
/// <summary>
/// Id for number format
///
/// Build in ID's
///
/// 0 General
/// 1 0
/// 2 0.00
/// 3 #,##0
/// 4 #,##0.00
/// 9 0%
/// 10 0.00%
/// 11 0.00E+00
/// 12 # ?/?
/// 13 # ??/??
/// 14 mm-dd-yy
/// 15 d-mmm-yy
/// 16 d-mmm
/// 17 mmm-yy
/// 18 h:mm AM/PM
/// 19 h:mm:ss AM/PM
/// 20 h:mm
/// 21 h:mm:ss
/// 22 m/d/yy h:mm
/// 37 #,##0 ;(#,##0)
/// 38 #,##0 ;[Red](#,##0)
/// 39 #,##0.00;(#,##0.00)
/// 40 #,##0.00;[Red](#,##0.00)
/// 45 mm:ss
/// 46 [h]:mm:ss
/// 47 mmss.0
/// 48 ##0.0E+0
/// 49 @
/// </summary>