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?
OriginalL'auteur Mike Baxter | 2013-08-21
Vous devez vous connecter pour publier un commentaire.
Comme FrankPI dit, l'utilisation des
DateTime.FromOADate()
. Vous pouvez utiliser cette fonction avec les données brutes à partir d'une cellule Excel, - il n'est pas nécessaire d'analyser le format.Excel encode ses dates et des heures dans un double. L'intégrale de la partie qui représente les jours après le 1er janvier 1900. La fraction représente le temps écoulé depuis minuit le jour de référence. Par exemple:
1.5 is January 1, 1900 @ Noon
et
41507.25 = August 21, 2013 @ 6:00 am
Consultez le MSDN docs sur cette fonction pour plus d'informations:
http://msdn.microsoft.com/en-us/library/system.datetime.fromoadate.aspx
OriginalL'auteur awudoin
L ' "étrange float" peut sans doute être converti un
DateTime
via leDateTime.FromOADate()
méthode. En fait, c'est le nombre de jours depuis le 1er janvier 1900 avec le temps comme les fractions, les e. g.0.04236 = 1/24 + 1/(24 * 60)
pour 1:01 am.OriginalL'auteur FrankPl
J'ai écrit cette fonction pour gérer une date d'entrée à partir d'Excel dans C#. Il gère un certain nombre de possibilités de type de données pour une cellule de date:
OriginalL'auteur t_plusplus
OriginalL'auteur Muhammad Bilal