Page 1 sur 1

[Résolu][Calc] Import de fichiers textes pré-formatés

Publié : 06 mars 2012 20:09
par superl59
bonjour,

nouveau sur ce forum et dans le monde de la macro j'essaye en vain de traiter par lot environ 10 000 fichiers texte

Heureusement les fichiers sont préformaté de la même façon, a savoir :

From: "<sans nom>" <+33tel>
To: <+33tel>
Subject: message message message

2007.03.16 21:55:08:00
2007.03.16 21:56:15:00
Size: 448 bytes

Je désire importer tous les fichiers dans une page Calc, les trier par date et heure afin de créer une conversation sur une ligne par fichier (ceux sont des fichiers sms qui sont mélangés)

- j'ai déja fais des tests avec les macros mais, j'arrive grace aux scripts trouvés ici a importer tous les fichiers mais ca importe en texte dans les cellules donc pas de tri par date.
- avec un fichier et une macro j'arrive a déplacer les éléments que je désire sur une même ligne mais je suis obliger d'importer le fichier avec séparateur "espace"
- probleme également pour l'heure parce que les millisecondes ne sont pas reconnu dans calc

J'ai une idée mais je n'arrive pas a la mettre en application :

- importer le fichier avec separateur "espace" et colonne 1 format "date" pour separer l'heure et la date, recuperer la date et l'heure et les copier sur la feuille 3, celulle A1 et B1
- ré-importer le même fichier sur la feuille 2 au format texte et copier A1, A2 et A3 sur les cellules C1,D1 et E1 sur feuille 3
- recommencer avec le fichier suivant sur la 2éme ligne de la feuille 3 et ainsi de suite
- pour l'heure je me ferais un chercher/remplacer sur le ":00" et passer la colonne en format heure

a partir de la, je pourrais faire un tri par date/heure et créer ainsi une conversation

quelqu'un peut m'aider, ou si quelqu'un a une solution moins lourde

merci d'avance
Laurent

Re: [Calc] Traitement de fichiers textes pré-formatés

Publié : 06 mars 2012 20:19
par spYre
Bonjour Laurent, et bienvenu sur ce forum :D ,


Il sera évidemment plus simple de t'aider si tu fournis un échantillon des fichiers txt concernés.
En attendant, les options du filtre d'importation csv sont détaillées sur cette page du wiki.
Tu trouveras également pas mal d'exemples sur le forum (recherche avec le mot clé FilterOptions entre autres).

Cordialement.

Re: [Calc] Traitement de fichiers textes pré-formatés

Publié : 06 mars 2012 21:16
par superl59
merci pour la réponse

j'ai réussis a faire un petit script et tout est bien importé, et classé ..

maintenant il me reste a modifier la macro pour faire ça à la chaîne.

voila le code :

Code : Tout sélectionner

Sub test
dim PysFeuille as object
dim PysURL as string, PysFilter as string, PysOpt as string
dim PysMode as integer

'La feuille qu'on veut remplacer
PysFeuille = thisComponent.sheets().getByName("feuille1")

'L'adresse du fichier CSV
PysURL = convertToUrl("c:\1.csv")

'Paramètres nécessaires à la copie
PysFilter = "Text - txt - csv (StarCalc)"
PysOpt = "20,0,STANDARD,1,1/5/2/5/3/2/4/2"      'Adapter en fonction du fichier CSV
PysMode = com.sun.star.sheet.SheetLinkMode.NORMAL

'Insertion de la feuille par "lien"
PysFeuille.link(PysURL, "", PysFilter, PysOpt, PysMode)

'Déconnection du lien
PysFeuille.setLinkSheetName("") 
PysFeuille.LinkDisplayName
PysFeuille.LinkUrl=""
PysFeuille.setLinkMode(com.sun.star.sheet.SheetLinkMode.NONE) 


  dim classeur as object
  dim feuilles as object
  dim feuille as object
  dim cellule as object
  dim champ As string
  dim i as integer
 
  classeur = thisComponent  ' le classeur
  feuilles = classeur.Sheets ' la collection des feuilles
  feuille1 = feuilles.getByName("feuille1")  'la feuille initiale
  feuille2 = feuilles.getByName("feuille2")  'La feuille finale
 
	feuille2.getCellByPosition(0,0).String = feuille1.getCellByPosition(0,4).String
	feuille2.getCellByPosition(1,0).String = feuille1.getCellByPosition(0,0).String
 	feuille2.getCellByPosition(2,0).String = feuille1.getCellByPosition(0,1).String
 	feuille2.getCellByPosition(3,0).String = feuille1.getCellByPosition(0,2).String
End Sub
et pas moyen de joindre un txt !!!
merci

Re: [Calc] Traitement de fichiers textes pré-formatés

Publié : 06 mars 2012 21:24
par MrPropre
Bonsoir,

En plus du code, fournissez avec un fichier complet. Cela augmentera vos chances de réponse en évitant d'avoir à recréer quelque chose qui au final, pourrait ne pas convenir.
superl59 a écrit :et pas moyen de joindre un txt !!!
Relisez notre rubrique "A lire avant tout !" : http://user.services.openoffice.org/fr/ ... =1&t=10246
Si l'extension de votre fichier n'est pas autorisé, encapsulez celui-ci dans un .zip

Re: [Calc] Traitement de fichiers textes pré-formatés

Publié : 06 mars 2012 23:02
par superl59
bon j'avance pas mal
je lis tous les fichiers dans la feuille 1, et ca copie vers la feuille 2.

encore un petit probleme avec la copie de la date : dans la feuille 1 c'est bien une date, a l'arrivée, sur feuille 2 j'ai un " ' " devant la date qui m'empeche de faire le tri dans calc

le code :

Code : Tout sélectionner

Sub test
dim classeur as object
  dim feuilles as object
  dim feuille as object
  dim cellule as object
  dim champ As string
  dim i as integer
dim PysFeuille as object
dim PysURL as string, PysFilter as string, PysOpt as string
dim PysMode as integer
Dim oSheet As Object, oRep As Object, oFicSrc As Object
Dim oTexte As Object, oCursor As Object, sTexte As String
Dim sFic As String, sRep As String, sFicSrc As String
Dim nRet As Integer, nRow As Long, iFic As Integer
Dim aProp(0) As New com.sun.star.beans.PropertyValue
   ' La 1ère Feuille - La 1ère ligne où l'on écrira
   oSheet = thisComponent.Sheets(0) : nRow = 0
   ' Propriétés ou ouvrir le doc temporaire en mode caché
   aProp(0).Name = "Hidden" : aProp(0).Value = True
   ' le dialogue pour sélectionner un dossier
   oRep = CreateUnoService("com.sun.star.ui.dialogs.FolderPicker")
   ' S'il y eu sélection, on récupère le chemine, sinon on sort
   If oRep.Execute() = 1 Then sRep = oRep.getDirectory() & "/" Else Exit Sub
   
'La feuille qu'on veut remplacer
PysFeuille = thisComponent.sheets().getByName("feuille1")

' Le 1er fichier trouvé
   sFic = Dir((sRep)& "*.txt",0)
   Do While Len(sFic) > 0
      ' L'URL complète en format OS
      sFicSrc = convertFromURL(sRep & sFic)

'Paramètres nécessaires à la copie
PysFilter = "Text - txt - csv (StarCalc)"
PysOpt = "20,0,STANDARD,1,1/5/2/5/3/2/4/2"      'Adapter en fonction du fichier CSV
PysMode = com.sun.star.sheet.SheetLinkMode.NORMAL

'Insertion de la feuille par "lien"
PysFeuille.link(sFicSrc, "", PysFilter, PysOpt, PysMode)


nrow = nrow + 1

  
  classeur = thisComponent  ' le classeur
  feuilles = classeur.Sheets ' la collection des feuilles
  feuille1 = feuilles.getByName("feuille1")  'la feuille initiale
  feuille2 = feuilles.getByName("feuille2")  'La feuille finale
 
	feuille2.getCellByPosition(0,0+nrow).String = feuille1.getCellByPosition(0,3).String
	feuille2.getCellByPosition(1,0+nrow).String = feuille1.getCellByPosition(0,0).String
 	feuille2.getCellByPosition(2,0+nrow).String = feuille1.getCellByPosition(0,1).String
 	feuille2.getCellByPosition(3,0+nrow).String = feuille1.getCellByPosition(0,2).String
 	feuille2.getCellByPosition(4,0+nrow).String = sFicSrc
 	
' on lit le suivant
      sFic = Dir()
      
     loop
'Déconnection du lien
PysFeuille.setLinkSheetName("") 
PysFeuille.LinkDisplayName
PysFeuille.LinkUrl=""
PysFeuille.setLinkMode(com.sun.star.sheet.SheetLinkMode.NONE) 
end sub
le code n'est pas optimisé mais ca tourne sauf pour la date ...

je joints le fichier txt type

Re: [Calc] Traitement de fichiers textes pré-formatés

Publié : 07 mars 2012 09:13
par Dude
Salut,
MrPropre a écrit :En plus du code, fournissez avec un fichier complet.
+1
superl59 a écrit :j'ai un " ' " devant la date qui m'empeche de faire le tri
Image
Dans le lien fourni par spYre avec "apostrophe +date" : http://user.services.openoffice.org/fr/ ... te#p108361

Merci d'ajouter [Résolu] au début du titre de ton 1er message et de cocher la case de l'icône de sujet (le V vert).

Re: [Calc] Traitement de fichiers textes pré-formatés

Publié : 07 mars 2012 14:36
par superl59
C'est bon j'ai reussis a faire ma macro.

pour la date qui avait une apostrophe, j'ai remplacé le string par un value dans le ligne :

feuille2.getCellByPosition(0,0+nrow).String = feuille1.getCellByPosition(0,3).String

et ca marche !!