Отсутствуют миллисекунды при получении значения DateTime из Excel с использованием .Net Interop

StackOverflow https://stackoverflow.com/questions/298458

  •  08-07-2019
  •  | 
  •  

Вопрос

Если я помещаю значение DateTime в ячейку Excel, используя Range.set_value через .Net COM Interop, а затем извлекаю значение этой же ячейки, используя Range.get_value миллисекундная часть значения не возвращается, хотя все остальное правильно.

Это ошибка?

Какой обходной путь? Я предполагаю, что использование свойства Value2 может помочь. Кто-нибудь еще пробовал это?

Это было полезно?

Решение 2

Как Джон предложил , преобразование DateTime в удвоение с использованием DateTime.ToOADate (затем снова с использованием DateTime.FromOADate) работает, если вы устанавливаете значение с помощью свойства Range.Value2.

Единственная проблема с этим свойством состоит в том, что, если вы еще не знаете, оно не говорит вам, что ячейка должна рассматриваться как DateTime. Я думаю, чтобы решить эту проблему, вам нужно использовать двухпроходный подход: получить значения ячеек, используя Range.get_Value, чтобы определить их тип, затем, для любых ячеек DateTime, получить их значения снова, используя Range.Value2, а затем преобразовать, используя DateTime .FromOADate.

Другие советы

Если вы устанавливаете дату / время с миллисекундным значением в Excel вручную, поддерживает ли оно его? Я не знаю о внутренней объектной модели Excel, но вполне возможно, что она не поддерживает миллисекунды.

РЕДАКТИРОВАТЬ: Хорошо, теперь мы знаем, что набор завершается неудачно (конечно, также может произойти сбой получения) ... вы можете попробовать установить его как двойное после преобразования его через DateTime.ToOADate () . Я не говорю, что у меня большая надежда, но стоит попробовать ...

Вероятно, это связано с проблемой, описанной в этой статье базы знаний .

В этом случае настройка свойства Value2 должна работать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top