Отсутствуют миллисекунды при получении значения DateTime из Excel с использованием .Net Interop - PullRequest
2 голосов
/ 18 ноября 2008

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

Это ошибка?

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

Ответы [ 3 ]

4 голосов
/ 18 ноября 2008

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

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

2 голосов
/ 18 ноября 2008

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

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

2 голосов
/ 18 ноября 2008

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

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

...