Convertir l'heure format de la colonne dans excel en C# DateTime

Je suis actuellement en utilisant Excel en C# (bibliothèques de Microsoft.Bureau de.Interop.Excel) pour lire une feuille de calcul excel dans mon application en C#.

J'ai d'abord essayé de lire toutes les cellules de leurs données brutes, mais a constaté que la Date formatée cellules ont été de me donner 5 chiffres entier, et le temps et les cellules mises en forme, de retour d'une virgule. J'ai alors découvert que vous pouvez utiliser une date de conversion de la méthode intégrée d'Excel en C# de la bibliothèque, comme suit:

DateTime excelDate = (DateTime)ExcelCalcValue.ExcelDateToDateTime(workbook, Double.Parse(cell.Value.ToString()));
output = excelDate.ToString("yyyy-MM-dd HH:mm");

Par le débogage et de mon application avec les différentes feuilles de test, j'ai été en mesure d'enregistrer les différentes chaînes de format de cellules retour lorsqu'ils sont mis en forme de différentes façons. Ces sont ci-dessous:

(WorksheetCell.CellFormat.FormatString)

Times

[$-F400]h:mm:ss\\ AM/PM
hh:mm:ss;@
h:mm:ss;@
[$-409]hh:mm:ss\\ AM/PM;@
[$-409]h:mm:ss\\ AM/PM;@

Dates

m/d/yy
[$-F800]dddd\\,\\ mmmm\\ dd\\,\\ yyyy
dd/mm/yyyy;@
dd/mm/yy;@
d/m/yy;@
d\\.m\\.yy;@
yyyy\\-mm\\-dd;@
[$-809]dd\\ mmmm\\ yyyy;@
[$-809]d\\ mmmm\\ yyyy;@

À l'aide de ces, je peux maintenant déterminer de manière fiable le style de mise en forme d'une cellule dans excel. En utilisant le code précédent, je peux détecter une date format de la cellule et retourner le bon de données en format DateTime. Cependant, je ne vois pas un équivalent de la fonction de conversion temps-les cellules mises en forme.

J'obtiens un résultat de 0.58368055555555554 quand j'ai lu une cellule formatée comme [$-F400]h:mm:ss\\ AM/PM. Je n'ai absolument aucune idée de comment le convertir en un DateTime, ou bien de cela dont il flotteur représente.

Quelqu'un peut-il suggérer une méthode de conversion de l'heure format des cellules excel (qui sont stockés comme une étrange float) dans la bonne DateTime variable?

Je ne peux pas faire comme les feuilles de calcul sera fourni par l'utilisateur, j'ai besoin de préparer de nombreux scénarios différents lorsque l'utilisateur importe leur feuille de calcul. Merci pour le lien!

OriginalL'auteur Mike Baxter | 2013-08-21