Отсутствуют миллисекунды при получении значения DateTime из Excel с использованием .Net Interop
-
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 должна работать.