Получить полную дату и время из ячейки в Excel с помощью NPOI - PullRequest
1 голос
/ 28 апреля 2020

Я пытаюсь получить данные из файлов Excel (старые xls), и, в частности, один столбец отформатирован как дата, хотя он должен быть отформатирован как время.

Когда я читаю файл с помощью NPOI, Я получаю только часть даты клетки; часть времени установлена ​​на 12 часов вечера.

1004 * Когда я открываю файл в Excel и щелкаю ячейку, я вижу, что время заполнено.

Например, в Excel "ячейка" значение формулы "равно:

4/23/2020  3:00:00 PM

И ячейка отформатирована как:

4/23/2020

Когда я читаю ячейку с помощью NPOI, я получаю:

var value = cell.NumericCellValue;// value = 43944.5
var dateValue = DateUtil.GetJavaDate(cell.NumericCellValue);// dateValue = {4/23/2020 12:00:00 PM}
var formattedValue = _formatter.FormatCellValue(cell);// formattedValue = "4/23/20"
var formula = cell.CellFormula;// throws exception "Cannot get a formula value from a numeric formula cell"

Я прочитал код для DateUtil.GetJavaDate и 43944.5 действительно преобразуется в 4/23/2020 12:00:00 PM, что означает, что NumericCellValue - это значение с уже примененным форматированием.

Поэтому мой вопрос: как я могу получить 4/23/2020 3:00:00 PM "значение формулы" для этой ячейки с использованием NPOI?

Если у вас есть предложения с другими библиотеками, я тоже буду рад их попробовать.

1 Ответ

0 голосов
/ 29 апреля 2020

Попробуйте использовать свойство DateCellValue ячейки:

if (cell.CellType == CellType.Numeric && DateUtil.IsCellDateFormatted(cell))
{
    DateTime date = cell.DateCellValue;
    Debug.WriteLine(date.ToString("MM/dd/yyyy h:mm:ss tt"));
}
...