Формат времени Excel с использованием Epplus - PullRequest
1 голос
/ 11 марта 2019

У меня есть документ Excel, который я пытаюсь импортировать в мою систему. (.net core 2.2 и EPPlus v4.5.3.1)

Данные Excel, такие как 09:57:32 и пользовательский формат ячейки [чч]: мм: сс

private TimeSpan? GetRequiredTimeFromRowOrNull(ExcelWorksheet worksheet, int row, int column, string columnName, StringBuilder exceptionMessage)
    {
        worksheet.Cells[row, column].Style.Numberformat.Format = "hh:mm:ss";
        var cellValue = TimeSpan.Parse(worksheet.Cells[row, column].Value.ToString());

        if (cellValue.ToString() != null && !string.IsNullOrWhiteSpace(cellValue.ToString()))
        {
            return cellValue;
        }

        exceptionMessage.Append(GetLocalizedExceptionMessagePart(columnName));
        return null;
    }

"worksheet.Cells [row, column] .Value" приходит 0.414953703703704

, а также

"worksheet.Cells [row, column] .Text" приходит 09: 12: 32

Как я могу получить точное значение?

1 Ответ

2 голосов
/ 12 марта 2019

Excel хранит даты и время в десятичных значениях.Часть целого числа - это день, а десятичная часть - время.

Итак, чтобы попасть в C # DateTime, используйте конвертер OLE Automation:

try
{
    var val = (double)worksheet.Cells[row, column].Value;
    var dt = DateTime.FromOADate(val);
    var cellValue = dt.TimeOfDay;
}
catch (Exception)
{
    //log conversion error
}

Потребуетсячтобы поместить Try.Catch вокруг JIC, ячейка не содержит числа.

...