EPPlus返回数字而不是日期/字符串

问题描述 投票:0回答:3

我正在尝试使用EPPlus读取.xlsx文件。

我可以加载工作表并读取除保留日期的单元格以外的所有单元格,这些单元格返回十进制数字而不是单元格中的值。

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"
}

该表的Cell [“A2”]的预期返回值是“5/19/2017 4:00:00 PM”,但我收到“42874.6666666667”。

获取该单元旁边的单元格中的数字值可以正常工作,因此我加载了正确的文件和工作表。

如何获取该单元格的日期(或至少是字符串并解析它)?

.net excel epplus
3个回答
2
投票

Excel将日期存储为自1900年1月1日(或Mac上的1904年)以来的天数,使用编程语言中的某种时间库,创建日期为1900年1月1日,并在每个单元格中添加任何值 - 在您的例如 - 42874.6666666667天。从理论上讲,这应该是在单元格中给出日期。


0
投票

你需要使用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
                }
            }

0
投票

将其中一个命名样式应用于具有值的单元格。

Excel实际上只有2(2.5?)种类型的单元格数据:

  1. 字符串 0-255个字符长 超过255个字符长(又名“备忘录”)
  2. 浮点数(“整数”是一种风格......)

因此,日期实际上是浮点数的一个特例,应用了一种风格(“ShortDate”,“mmm dd yyyy”或其他)。

将样式应用于单元格确定它是如何呈现的,是的,EPPlus已经设置了在其样式字典中使用的Excel内置样式。

将样式应用于单元格的EPPlus方式与您在VBA中的方式非常相似:

'''VBA示例,使用内置样式'''如果是工作表(“Sheet1”)。范围(“B4”)。样式=“正常”然后是工作表(“Sheet1”)。范围(“B4”)。样式=“百分比”结束如果

在MSDN的某处,有一个C#/ VBA程序员的内置Excel样式的所有枚举/名称/定义的列表。这些样式也在EPPlus样式字典中设置。

您还可以将自己的样式定义添加到EPPlus代码中的样式字典中。在EPPlus中打开.XLSX文件时,以前在.XLSX文件中定义的任何自定义样式都可用。

© www.soinside.com 2019 - 2024. All rights reserved.