Формат даты, установленный в Excel, игнорируется при использовании Excel Interop - PullRequest
0 голосов
/ 08 июля 2019

Я использую библиотеку Microsoft Office C # (Microsoft.Office.Interop.Excel), чтобы записать некоторые значения в существующий файл Excel.

В Excel я уже отформатировал некоторые ячейки в файле, которые будут интерпретироваться какдата, как показано на скриншоте: enter image description here

Как видите, для ячейки задан формат dd/MM/yyyy.

Однако, когда я тогдазаписал значение с помощью библиотеки взаимодействия, например:

cell.Value2 = "20/06/2019"

Я заметил, что это не работает: когда я открывал последний файл в Excel, ячейка интерпретировалась как обычный текст, а не как дата.

Итак, я выполнил некоторую отладку, и оказалось, что формат, который я установил для ячейки, полностью игнорируется, и что библиотека взаимодействия использует американский формат, как вы можете видеть, проверив NumberFormatсвойство ячейки с визуальным отладчиком студии:
enter image description here

Что я здесь не так делаю?Почему используется американский формат даты?
Некоторая дополнительная информация:

  • В моей операционной системе (итальянский) по умолчанию используется формат dd/MM/yyyy
  • Я не измениллокаль моего приложения на c # любым способом
  • Моя копия Excel настроена на итальянский язык, который также должен использовать формат dd/MM/yyyy по умолчанию.Я проверил в Options -> Language, и я могу подтвердить это.

EDIT: и интересная вещь, которую я нашел: если я дважды щелкаю по ячейке, а затем щелкаю по ней, она «волшебным образом»исправляет форматирование .... почему?И можно ли имитировать двойной щелчок по ячейке с помощью Excel Interop?

1 Ответ

1 голос
/ 08 июля 2019

Даты в Excel хранятся как двойные, представляющие дату автоматизации OLE. MSDN

В вашем случае вы устанавливаете строковое значение.Правильный способ установить дату в Excel:

cell.NumberFormat = "dd/MM/yyyy";
cell.Value = new DateTime(2019, 6, 20).ToOADate();
...