#c# #excel #asp.net-core #import #epplus
#c# #excel #asp.net-core #импорт #epplus
Вопрос:
У меня есть документ 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 amp;amp; !string.IsNullOrWhiteSpace(cellValue.ToString()))
{
return cellValue;
}
exceptionMessage.Append(GetLocalizedExceptionMessagePart(columnName));
return null;
}
«рабочий лист.Ячейки [строка, столбец].Значение»
поставляется 0.414953703703704
а также
«рабочий лист.Ячейки [строка, столбец].Текст «приходит 09:12:32
Как я могу получить точное значение?
Ответ №1:
Excel хранит даты и время в десятичных значениях. Целочисленная часть — это день, а десятичная часть — время.
Итак, чтобы перейти на C # DateTime
, используйте OLE Automation converter:
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, в ячейке которого нет номера.