Столбец Excel Date возвращает INT с использованием EPPlus

Поэтому я использую EPPlus для чтения и записи документов Excel.

Рабочий процесс

  • Пользователь создает заполненный документ excel
  • Открывает документ и добавляет строку
  • Загружено и прочитано

Даты, которые создаются при создании документа с использованием EPPlus, отображаются правильно, когда я читаю значение обратно, но строка, которую пользователь меняет дату или добавляет, отображается как значение INT, которое я не могу использовать в качестве реального Дата.

Когда я ввожу дату 1/01/2014 и записываю ее, вывод при открытии файла показывает 41640

Я читаю его следующим образом

sheet.Cells[i, "AE".ConvertExcelColumnIndex()].Value != null
     ? sheet.Cells[i, "AE".ConvertExcelColumnIndex()].Value.ToString().Trim()
         : string.Empty

Обновление

При экспорте файла я добавил следующие

DateTime testDate;

if (DateTime.TryParse(split[i], out testDate))
{
    sheet.Cells[row, i + 1].Style.Numberformat.Format = "MM/dd/yyyy";
    sheet.Cells[row, i + 1].Value = testDate.ToString("MM/dd/yyyy");
}

Также при чтении значения назад я попытался

sheet.Cells[i, "AE".ConvertExcelColumnIndex()].Style.Numberformat.Format = "MM/dd/yyy";

Я все еще получаю INT назад

Ответы

Ответ 1

... когда мне нужно прочитать этот файл excel, единственные даты, которые неверными являются те, которые пользователь изменил

Итак, когда вы читаете измененный лист excel, измененные даты - это числа, а неизменные значения - строки в вашем формате даты?

Вы можете получить DateTime через DateTime.FromOADate:

long dateNum = long.Parse(worksheet.Cells[row, column].Value.ToString());
DateTime result = DateTime.FromOADate(dateNum);

С вашим номером образца:

Console.Write(DateTime.FromOADate(41640)); // ->  01/01/2014 

Ответ 2

Вы также можете изменить свойство 'NumberFormatLocal'. Это сработало для меня. Если вы форматируете файл Excel, прежде чем использовать его, используйте EPPLUS.

Следующий базовый пример столбца форматирования кода A в типичном файле excel.

Sub ChangeExcelColumnFormat()

Dim ExcelApp As Excel.Application
Dim ExcelWB As Excel.Workbook
Dim ExcelWS As Excel.Worksheet
Dim formatRange As Excel.Range

Dim strFile As String = "C:\Test.xlsx"
Dim strSheetname As String = "Sheet1"


ExcelApp = New Excel.Application
ExcelWB = ExcelApp.Workbooks.Open(strFile)

    strColSelect = "A:A"
    strFormat = "dd/mm/yyyy"

    formatRange = ExcelWS.Range(strColSelect)
    formatRange.NumberFormatLocal = strFormat

ExcelWB.Save()
ExcelWB.Close()
ExcelApp.Quit()

ExcelWS = Nothing
ExcelWB = Nothing
ExcelApp = Nothing

Конец Sub