EPPlus returns 数字而不是 date/string
EPPlus returns number instead of date/string
我正在尝试使用 EPPlus 读取 .xlsx 文件。
我可以加载作业sheet 并读取所有单元格,但保存日期的单元格除外,returns 是十进制数字而不是单元格中的值。
FileInfo fileInfo = new FileInfo(filePath);
using (ExcelPackage excel = new ExcelPackage(fileInfo))
{
var worksheet = excel.Workbook.Worksheets.First();
string cellName = worksheet.Cells[i, colDate].ToString(); // = "A2"- correct cell
string cellValue= worksheet.Cells[i, colDate].Value.ToString(); // = "42874.6666666667"
}
sheet 的 Cell["A2"] 的预期返回值为“5/19/2017 4:00:00 PM”,但我收到“42874.6666666667”。
在那个单元格旁边的单元格中获取数字值工作正常,所以我加载了正确的文件和 sheet。
如何获取该单元格的日期(或至少是字符串并解析它)?
Excel 将日期存储为自 1900 年 1 月 1 日(或者 Mac 上的 1904 年)以来的天数,
在您的编程语言中使用某种时间库,创建一个日期 1900 年 1 月 1 日,并添加每个单元格中的任何值 - 在您的示例中 - 42874.6666666667 天。从理论上讲,这应该为您提供单元格中的日期。
您需要使用MemoryStream
byte[] bin = File.ReadAllBytes(file);
using (MemoryStream stream = new MemoryStream(bin))
{
using (ExcelPackage excel = new ExcelPackage(stream))
{
var worksheet = excel.Workbook.Worksheets.First();
string cellValue = worksheet.Cells[2, 1].Value.ToString(); // A2 Cell value
}
}
将其中一种命名样式应用于其中包含值的单元格。
Excel 确实只有 2(2.5?)种单元格数据:
- 字符串
- 0-255 个字符长
- 长度超过 255 个字符(又名 "memo")
- 浮点数("integers"是一种风格...)
所以日期实际上是浮点数的特例,应用了一种样式("ShortDate"、"mmm dd yyyy" 或其他)。
将样式应用于单元格决定了它的呈现方式,是的,EPPlus 已经设置了 Excel built-in 样式以在其样式字典中使用。
EPPlus 将样式应用于单元格的方式与您在 VBA 中的做法非常相似:
'''VBA example, using built-in styles'''
如果 Worksheets("Sheet1").Range("B4").Style = "Normal" Then
工作表("Sheet1").范围("B4").样式="Percent"
结束如果
在 MSDN 的某处,有一个列表,列出了 C#/VBA 程序员的 built-in Excel 样式的所有 enums/names/definitions。这些样式也在 EPPlus 样式字典中设置。
您还可以将自己的样式定义添加到 EPPlus 代码中的样式字典中。当您在 EPPlus 中打开 .XLSX 文件时,之前在 .XLSX 文件中定义的任何自定义样式也将可用。
我正在尝试使用 EPPlus 读取 .xlsx 文件。
我可以加载作业sheet 并读取所有单元格,但保存日期的单元格除外,returns 是十进制数字而不是单元格中的值。
FileInfo fileInfo = new FileInfo(filePath);
using (ExcelPackage excel = new ExcelPackage(fileInfo))
{
var worksheet = excel.Workbook.Worksheets.First();
string cellName = worksheet.Cells[i, colDate].ToString(); // = "A2"- correct cell
string cellValue= worksheet.Cells[i, colDate].Value.ToString(); // = "42874.6666666667"
}
sheet 的 Cell["A2"] 的预期返回值为“5/19/2017 4:00:00 PM”,但我收到“42874.6666666667”。
在那个单元格旁边的单元格中获取数字值工作正常,所以我加载了正确的文件和 sheet。
如何获取该单元格的日期(或至少是字符串并解析它)?
Excel 将日期存储为自 1900 年 1 月 1 日(或者 Mac 上的 1904 年)以来的天数, 在您的编程语言中使用某种时间库,创建一个日期 1900 年 1 月 1 日,并添加每个单元格中的任何值 - 在您的示例中 - 42874.6666666667 天。从理论上讲,这应该为您提供单元格中的日期。
您需要使用MemoryStream
byte[] bin = File.ReadAllBytes(file);
using (MemoryStream stream = new MemoryStream(bin))
{
using (ExcelPackage excel = new ExcelPackage(stream))
{
var worksheet = excel.Workbook.Worksheets.First();
string cellValue = worksheet.Cells[2, 1].Value.ToString(); // A2 Cell value
}
}
将其中一种命名样式应用于其中包含值的单元格。
Excel 确实只有 2(2.5?)种单元格数据:
- 字符串
- 0-255 个字符长
- 长度超过 255 个字符(又名 "memo")
- 浮点数("integers"是一种风格...)
所以日期实际上是浮点数的特例,应用了一种样式("ShortDate"、"mmm dd yyyy" 或其他)。
将样式应用于单元格决定了它的呈现方式,是的,EPPlus 已经设置了 Excel built-in 样式以在其样式字典中使用。
EPPlus 将样式应用于单元格的方式与您在 VBA 中的做法非常相似:
'''VBA example, using built-in styles''' 如果 Worksheets("Sheet1").Range("B4").Style = "Normal" Then 工作表("Sheet1").范围("B4").样式="Percent" 结束如果
在 MSDN 的某处,有一个列表,列出了 C#/VBA 程序员的 built-in Excel 样式的所有 enums/names/definitions。这些样式也在 EPPlus 样式字典中设置。
您还可以将自己的样式定义添加到 EPPlus 代码中的样式字典中。当您在 EPPlus 中打开 .XLSX 文件时,之前在 .XLSX 文件中定义的任何自定义样式也将可用。