2010-04-12 5 views
0

Je travaille sur un projet où je dois analyser des fichiers Excel pour un client pour extraire des données. Une chose étrange apparaît ici: quand j'analyse une date au format 5/9 (9 mai) dans la feuille Excel, je reçois 39577 dans mon programme. Je ne suis pas sûr si l'année est encodée ici (c'est 2008 pour ces feuilles).Excel analyse (xls) date erreur

Ces dates sont-elles le nombre de jours écoulés depuis une sorte d'époque?

Est-ce que quelqu'un sait comment convertir ces nombres en quelque chose de significatif? Je ne cherche pas une solution qui les convertirait correctement au moment de l'analyse à partir du fichier Excel (nous avons déjà des milliers de fichiers extraits qui nécessitaient un humain pour sélectionner les informations pertinentes - refaire l'extraction n'est pas une option).

+0

Quel est l'outil/la langue que vous utilisez pour lire ce fichier Excel? –

Répondre

1

Excel stocke les dates en tant que nombre de jours depuis 0-JAN-1900 (donc 1-JAN-1900 aurait une valeur de "1"). Vous pouvez trouver une répartition très bien de la façon dont les dates et heures Excel gère ici:

Dates And Times In Excel

Lorsque les dates apparaissent à l'écran dans Excel comme « 5/9 », « 9 mai », ou un tel, il est une astuce de la mise en forme et n'est pas représentatif de la valeur de données sous-jacente. Il semble que votre programme d'analyse tire la valeur sous-jacente, pas la date formatée. Cependant, pour suggérer un correctif, j'ai besoin de savoir quel est votre programme d'analyse syntaxique (macro Excel, formule, code externe, etc.).

0

Tout ce que vous devez faire est de formater correctement les cellules. Ou ai-je mal compris votre question - dites-vous que vous voulez le faire en dehors d'Excel? Je n'étais pas sûr. Je vais supprimer cette réponse s'il s'avère que c'est stupide.

1

DateTime.FromOADate (si vous utilisez .NET) est la méthode que vous souhaitez. Les dates Excel sont stockées en double. Si vous avez des dates au cours des deux premiers mois de 1900, vous pourriez obtenir un peu par le bogue de l'année bissextile Excel 1900.

De http://msdn.microsoft.com/en-us/library/system.datetime.fromoadate.aspx:

double précision nombre à virgule flottante qui représente une date que le nombre de jours avant ou après la date de base, minuit, le 30 Décembre 1899. Le signe et intégral une partie de codage de la date d comme un déplacement d'une journée positive ou négative de 30 Décembre 1899, et la valeur absolue de la partie fractionnaire de d code pour le temps de jour en tant que fraction d'un jour déplacement à partir de minuit. d doit être une valeur comprise entre le négatif 657435.0 et le positif 2958466.0.