Millisecondes manquantes lors de l'obtention d'une valeur DateTime à partir d'Excel à l'aide de .Net Interop

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

  •  08-07-2019
  •  | 
  •  

Question

Si je mets une valeur DateTime dans une cellule Excel à l'aide de Range.set_value via .NET COM Interop, puis récupère la valeur de cette même cellule à l'aide de Range.get_value , la partie milliseconde de la valeur n’est pas renvoyée, bien que tout le reste soit correct.

Est-ce un bug?

Quelle est la solution de contournement? J'imagine que l'utilisation de la propriété Value2 pourrait aider. Quelqu'un d'autre a-t-il déjà essayé?

Était-ce utile?

La solution 2

As Jon a suggéré , la conversion de DateTime en double à l'aide de DateTime.ToOADate (puis de nouveau à l'aide de DateTime.FromOADate) fonctionne si vous définissez la valeur à l'aide de la propriété Range.Value2.

Le seul problème avec cette propriété est que, si vous ne le savez pas déjà, cela ne vous indique pas que la cellule est censée être traitée comme un DateTime. Je suppose que pour résoudre ce problème, vous devez utiliser une approche en deux étapes: obtenir les valeurs de cellule à l'aide de Range.get_Value pour déterminer leur type, puis, pour les cellules DateTime, récupérez leurs valeurs à l'aide de Range.Value2, puis convertissez à l'aide de DateTime. .FromOADate.

Autres conseils

Si vous définissez manuellement une date / heure avec une valeur en millisecondes dans Excel, la conserve-t-elle? Je ne connais pas le modèle objet interne Excel, mais il est concevable qu'il ne prenne tout simplement pas en charge les millisecondes.

EDIT: Bon, nous savons maintenant que l’ensemble échoue (l’obtention peut également échouer, bien sûr) ... vous pouvez essayer de le définir comme un double après le convertir via DateTime.ToOADAD () . Je ne dis pas que je garde beaucoup d'espoir, mais ça vaut le coup d'essayer ...

Cela est probablement dû au problème décrit dans cet article de la Base de connaissances .

Dans ce cas, définir la propriété Value2 devrait fonctionner.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top