如何设置单元格数据类型
How To Set Cell Data Type
我正在尝试设置单元格的数据类型,但使用 EPPlus 似乎无法做到这一点。
如果我在单元格中放置一个数字作为值,我会在导出的 Excel 文件中得到一般数据类型。
如果设置单元格的数字格式,例如:
workSheet.Cells[range].Style.Numberformat.Format = "mm/dd/yyyy hh:mm:ss";
那我还是得不到日期或时间。导出的 Excel 文件会将单元格显示为自定义数据类型。
我只能获取常规或自定义数据类型。我想将 Cells 的数据类型设置为时间,但我不能。问题是,如果未设置数据类型,则出于某种原因 Pivot table in other sheet 会将数字排序为字符串 :(
那么,请问有什么方法可以设置单元格的数据类型吗?
excel 中的数字格式有点奇怪。基本上,它是一个预定义字符串列表,因此它逐个单元格进行匹配。要查看该列表在 EPPlus 中的样子,请查看源代码中的 ExcelNumberFormat.cs class。
但是,如果您只需要 Excel "see" 在“主页”功能区的“数字”->“数字格式”下拉列表中将单元格设置为某种类型,这应该可以满足您的需求:
[TestMethod]
public void Date_Format_Test()
{
//
var existingFile = new FileInfo(@"c:\temp\temp.xlsx");
if (existingFile.Exists)
existingFile.Delete();
using (var pck = new ExcelPackage(existingFile))
{
var ws = pck.Workbook.Worksheets.Add("Content");
var date = DateTime.Now;
//Raw date value as number
ws.Cells["A1"].Value = date;
//As "Short Date"
ws.Cells["A2"].Value = date;
ws.Cells["A2"].Style.Numberformat.Format = "mm-dd-yy";
//As "Time"
ws.Cells["A3"].Value = date;
ws.Cells["A3"].Style.Numberformat.Format = "[$-F400]h:mm:ss\ AM/PM";
pck.Save();
}
}
这个建议很好,用于在 Excel 中设置数字单元格类型我使用
worksheet.Column(1).Style.Numberformat.Format = "#,##0.000";
但我真的很想在 EPPlus 中找到一些 table 格式,在 Excel 中找到一些单元格类型以获得另一种 Excel 类型,如货币、百分比等...
这里是EPPlus/EPPlus/Style/ExcelNumberFormat.cs中列出的49种格式
(located here):
"General"
"0"
"0.00"
"#,##0"
"#,##0.00"
"0%"
"0.00%"
"0.00E+00"
"# ?/?"
"# ??/??"
"mm-dd-yy"
"d-mmm-yy"
"d-mmm"
"mmm-yy"
"h:mm AM/PM"
"h:mm:ss AM/PM"
"h:mm"
"h:mm:ss"
"m/d/yy h:mm"
"#,##0 ;(#,##0)"
"#,##0 ;[Red](#,##0)"
"#,##0.00;(#,##0.00)"
"#,##0.00;[Red](#,#)"
"mm:ss"
"[h]:mm:ss"
"mmss.0"
"##0.0"
"@"
我正在尝试设置单元格的数据类型,但使用 EPPlus 似乎无法做到这一点。
如果我在单元格中放置一个数字作为值,我会在导出的 Excel 文件中得到一般数据类型。
如果设置单元格的数字格式,例如:
workSheet.Cells[range].Style.Numberformat.Format = "mm/dd/yyyy hh:mm:ss";
那我还是得不到日期或时间。导出的 Excel 文件会将单元格显示为自定义数据类型。
我只能获取常规或自定义数据类型。我想将 Cells 的数据类型设置为时间,但我不能。问题是,如果未设置数据类型,则出于某种原因 Pivot table in other sheet 会将数字排序为字符串 :(
那么,请问有什么方法可以设置单元格的数据类型吗?
excel 中的数字格式有点奇怪。基本上,它是一个预定义字符串列表,因此它逐个单元格进行匹配。要查看该列表在 EPPlus 中的样子,请查看源代码中的 ExcelNumberFormat.cs class。
但是,如果您只需要 Excel "see" 在“主页”功能区的“数字”->“数字格式”下拉列表中将单元格设置为某种类型,这应该可以满足您的需求:
[TestMethod]
public void Date_Format_Test()
{
//
var existingFile = new FileInfo(@"c:\temp\temp.xlsx");
if (existingFile.Exists)
existingFile.Delete();
using (var pck = new ExcelPackage(existingFile))
{
var ws = pck.Workbook.Worksheets.Add("Content");
var date = DateTime.Now;
//Raw date value as number
ws.Cells["A1"].Value = date;
//As "Short Date"
ws.Cells["A2"].Value = date;
ws.Cells["A2"].Style.Numberformat.Format = "mm-dd-yy";
//As "Time"
ws.Cells["A3"].Value = date;
ws.Cells["A3"].Style.Numberformat.Format = "[$-F400]h:mm:ss\ AM/PM";
pck.Save();
}
}
这个建议很好,用于在 Excel 中设置数字单元格类型我使用
worksheet.Column(1).Style.Numberformat.Format = "#,##0.000";
但我真的很想在 EPPlus 中找到一些 table 格式,在 Excel 中找到一些单元格类型以获得另一种 Excel 类型,如货币、百分比等...
这里是EPPlus/EPPlus/Style/ExcelNumberFormat.cs中列出的49种格式 (located here):
"General"
"0"
"0.00"
"#,##0"
"#,##0.00"
"0%"
"0.00%"
"0.00E+00"
"# ?/?"
"# ??/??"
"mm-dd-yy"
"d-mmm-yy"
"d-mmm"
"mmm-yy"
"h:mm AM/PM"
"h:mm:ss AM/PM"
"h:mm"
"h:mm:ss"
"m/d/yy h:mm"
"#,##0 ;(#,##0)"
"#,##0 ;[Red](#,##0)"
"#,##0.00;(#,##0.00)"
"#,##0.00;[Red](#,#)"
"mm:ss"
"[h]:mm:ss"
"mmss.0"
"##0.0"
"@"