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