|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Francois Inscription : janvier 2012 Messages : 15 ![]() |
bonjour,
J'utilise Spreadsheet: Lorsque je lit un champ date, au lieu de récupérer la valeur au format date, je récupère un numérique. Apparemment d'apres le CPAN il me faudrait le module DateTime::format::Excel Connaissez-vous une astuce/méthode pour faire la conversion sans avoir à installer ce module (DateTime::format::Excel) sur mon système, car ce module à enormément de dépendances ...et je ne peux pas les installer sans l'accord des Admin Linux ... Merci. |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Laurent R.Conseil - Consultant en systèmes d'information Inscription : mai 2012 Messages : 569 ![]() |
Peux-être regarder ce que fait ce module pour pomper le code...
Pas fan de ce genre de solution a priori, mais, bon, parfois...
__________________
Sauf mention contraire explicite, les bouts de code que je poste en réponse à une question n'ont pas forcément été testés. |
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Francois Inscription : janvier 2012 Messages : 15 ![]() |
J'ai une idée mais je ne sais pas comment la coder
Pour Excel, le numérique 1 correspond au 01 Janvier 1900 . Le numérique 41250, correspond au 7 /12/2012 ( 01/01/1900 + 41239 jours) Est-il possible en perl à partir du numérique correspondant au nombres de jours depuis le 01/01/1900 (Ex: 41250) de recalculer la date 01/01/1900 + (41250-1) = 07/12/2012 ? Merci pour votre aide |
|
|
00
|
|
|
#4 | |||
![]() ![]() ![]() Inscription : avril 2004 Messages : 13 528 ![]() |
Bonjour,
J'ai créé un fichier xls avec une seule cellule avec à l'intérieur la date 21/11/2012. Avec le code suivant : Code :
Citation:
__________________
|
|||
|
|
00
|
|
|
#5 | ||||
|
Expert Confirmé
![]() ![]() Inscription : avril 2009 Messages : 2 636 ![]() |
La date numérique retournée peut peut-être être utilisée (moyennant éventuellement une conversion numérique simple) vers une valeur numérique utilisable par localtime et strftime (module POSIX dans le Core de perl depuis la version 5).
La fonction localtime a pour date de base Epoch (0 seconde est équivalent au 1er janvier 1970). Reste à connaitre la base pour la date Excel. Si j'en crois cet article, la date de référence serait le 1er janvier 1900, et la valeur vaudrait alors 1 (en jour). Reste à calculer le nombre de secondes entre ces deux dates de référence. On constate que ce calcul, en valeur entière, dépasse la capacité des entiers, et n'est pas possible : Code :
perl -MPOSIX=mktime -E 'print mktime(0,0,0,1, 0, 70) - mktime(0,0,0,1,0,0)'
Code :
Code :
$date_localtime = ($date_excel - 25567) * 86400 Code :
__________________
Plus j'apprends, et plus je mesure mon ignorance (philou67430) Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book) Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé Using strict and warnings is good for you. |
||||
|
|
00
|
|
|
#6 | ||
|
Invité de passage
![]() Francois Inscription : janvier 2012 Messages : 15 ![]() |
bonjour Djibril,
J'ai testé votre script. La façon dont vous lisez le fichier Excel ne fonctionne pas sur mon systeme ! "Can't locate object methode parse via package Spreadsheet: Peut être un problème de version ? . voici un extraction de mon code avec la methode utilisée pour lire l'Excel. Je recherche une cellule contenant "Delivery" et je récupère la date 2 row en dessous --------------------------------------------------------------------- Code :
Le print Ma date ".$madate."\n"; renvoie un numérique et pas une date. |
||
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Francois Inscription : janvier 2012 Messages : 15 ![]() |
bonjour Philou67430,
Le problème avec ta méthode est que je n'ai pas le module Date::Calc installé sur mon système. |
|
|
00
|
|
|
#8 |
|
Expert Confirmé
![]() ![]() Inscription : avril 2009 Messages : 2 636 ![]() |
Tu n'as pas besoin du module Date::Calc, puisque je t'ai donné le résultat de la différence entre Epoch et l'origine des temps Microsoft. Tu n'as qu'à utiliser cette valeur comme constante pré-calculée (en le documentant dans le source).
__________________
Plus j'apprends, et plus je mesure mon ignorance (philou67430) Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book) Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé Using strict and warnings is good for you. |
|
|
00
|
|
|
#9 |
|
Invité de passage
![]() Francois Inscription : janvier 2012 Messages : 15 ![]() |
Et oui suis-je bête ..... !
![]() Je reconverti bien le numerique en format date mais en utilisant comme constant 25569 (le jour 0 pour Excel est le 31/12/1899 en fait) Merci pour ton aide précieuse |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com