Milissegundos ausentes quando se obter um valor DateTime de Excel usando interoperabilidade .NET

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

  •  08-07-2019
  •  | 
  •  

Pergunta

Se eu colocar um valor DateTime em uma célula do Excel usando Range.set_value através do .NET COM Interop, em seguida, recuperar o valor dessa mesma célula usando Range.get_value, a parte milissegundo do valor não é retornado, embora tudo o resto é correta.

Este é um bug?

Qual é a solução? Eu estou supondo que o uso da propriedade Value2 vez pode ajudar. Tem mais alguém tentou isso?

Foi útil?

Solução 2

Como Jon sugeriu , convertendo o DateTime para um duplo usando DateTime.ToOADate (em seguida, novamente usando DateTime.FromOADate) funciona se você definir o valor usando a propriedade Range.Value2.

O único problema com este estabelecimento é que, se você ainda não sabe, ele não lhe dizer que a célula é suposto ser tratado como um DateTime. Eu acho que para resolver isso, você precisa usar uma abordagem de duas passagens: obter valores de célula usando Range.get_Value para determinar seu tipo, em seguida, para quaisquer células de data e hora, obter os seus valores novamente usando Range.Value2, em seguida, converter usando DateTime .FromOADate.

Outras dicas

Se você definir uma data / hora com um valor de milissegundos no Excel manualmente, não é mantê-lo? Eu não sei sobre o modelo de objeto interno Excel, mas é concebível que ele simplesmente não suporta milissegundos.

EDIT: Ok, agora nós sabemos que o conjunto falhar (o get também pode falhar, é claro) ... você poderia tentar defini-lo como um duplo após convertê-la via DateTime.ToOADate () . Não estou dizendo que eu estou segurando a muito esperança, mas vale a pena tentar ...

É provavelmente por causa do problema descrito no este artigo KB .

Nesse caso, definindo a propriedade Value2 deve funcionar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top