![]() |
Bienvenue invité ( Connexion | Inscription )
![]() |
![]()
Message
#1
|
|
Nouveau Membre Groupe : Membres Messages : 1 Inscrit : 6 Feb 2025 Membre no 220 256 ![]() |
Bonjour à toutes et tous,
Je souhaiterais utiliser AppleScript pour transformer un fichier .csv. Afin de rendre les choses facilement compréhensibles je joins deux fichiers: 1- Le fichier d’origine au format csv 2- Le fichier tel que je le souhaiterai après être passé dans le script. Voici les étapes à réaliser 1-Ouverture du fichier dans numbers. (Information: Le fichier se situe dans le dossier téléchargement) 2-Suppression des 6 premières lignes 3-Suppression de toutes formes de style de police et de couleur de cellule 4-Rassembler toutes les cellules de la colonne nature de l’opération d’une même opération appartenant à la même date dans la première cellule de l’opération, la suppression de tous les espaces du texte n’est pas nécessaire, et ce pour chacune des opérations. 5- Supprimer toutes les lignes vides. J’espère avoir réussi à exposer clairement ma demande. Si quelqu’un parmi vous avait les connaissances suffisantes pour réaliser cela, si toute fois c’était réalisable, je serait très reconnaissant de pourvoir bénéficier de son aide pour l’écriture du script. Par avance merci
Fichier(s) joint(s)
|
|
|
![]() |
![]()
Message
#2
|
|
Macbidouilleur de bronze ! ![]() ![]() Groupe : Membres Messages : 266 Inscrit : 7 Dec 2013 Lieu : Ile de France Membre no 188 169 ![]() |
Bonjour,
Après le script de Zeltron54 qui concatène les lignes dans Numbers et fonctionne très bien, le script ci-dessous réponds également à la demande en faisant la concaténation dans Applescript et en écrivant le résultat dans Numbers J'ajoute que ce script tient compte du fait que les champs du fichier csv sont encadrés de guillemets Juste un autre façon de faire... On peut utiliser le script directement en droppant le fichier source CSV sur l’icône de l'application. Bonne journée CODE property SepCSV : ";" -- separateur de CSV
property TSep : "| " -- separateur des lignes dans le champs Nature (* Format source : fichier CSV Le fichier contient 3 types de lignes: 1) lignes sans date valide et qui ne suivent pas un ligne avec date valide (y compris un ligne vide)-> on ne fait rien 2) lignes sans date valide et qui suivent une ligne avec date valide -> on ajoute la Nature à la Nature de la ligne type 3 qui précéde 3) lignes avec date valide, Nature, Debit, Credit, Devise, Date_valeur, Libelle -> on enregistre *) global F_Source -- le fichier source csv global Ligne_Pre -- true si une ligne précedente est de type 3 on run -- utilisé lorsqu'on lance le script comme application: il demande le fichier source et destination set F_Source to (choose file with prompt ("Selection du fichier CSV à traiter")) as string Conversion() end run on open (Liste_Fichier) -- utilisé lorsqu'on drope un ou plusieurs fichiers source sur l'icone de l'application repeat with Un_Fichier in Liste_Fichier set F_Source to first item of Liste_Fichier Conversion() end repeat end open on Conversion() -- lecture des lignes du fichier source et écriture des lignes du fichier converti set L_Numbers to 1 -- creation d'un document Numbers vide et sans couleurs tell application "Numbers" activate make new document tell first table of active sheet of front document set header row count to 0 set header column count to 0 set name to "" -- "Relevé bancaire" set row count to 60 -- defini le nombre de lignes maxi pour les données d'un relevé set width of column 1 to 70 set width of column 2 to 200 set width of column 3 to 60 set width of column 4 to 60 set width of column 5 to 42 set width of column 6 to 70 set width of column 7 to 200 set myrange to column 1 tell myrange to set alignment to center set myrange to column 6 tell myrange to set alignment to center set myrange to column "C" tell myrange to set format to currency set myrange to column "D" tell myrange to set format to currency end tell end tell set AppleScript's text item delimiters to SepCSV set Ligne_Pre to false set T3_Date to "Date" set T3_Nature to "Nature" set T3_Debit to "Débit" set T3_Credit to "Crédit" set T3_Devise to "Devise" set T3_DateVal to "Date Valeur" set T3_Libelle to "Libellé" set ligne_type3 to {"Date", "Nature", "Debit", "Credit", "Devise", "DateValeur", "Libelle"} -- les txt n'aiment pas les accents ! set Releve to paragraphs of (read file F_Source) repeat with une_Ligne in Releve set Ligne_list to une_Ligne's text items if (count of une_Ligne) > 7 then -- on ne traite que les lignes avec 7 items if Date_Valide(Sup_Guillemets(text item 1 of Ligne_list)) then -- on enregistre la ligne de type 3 tell application "Numbers" to tell first table of active sheet of front document set value of cell L_Numbers of column 1 to T3_Date set value of cell L_Numbers of column 2 to T3_Nature set value of cell L_Numbers of column 3 to T3_Debit set value of cell L_Numbers of column 4 to T3_Credit set value of cell L_Numbers of column 5 to T3_Devise set value of cell L_Numbers of column 6 to T3_DateVal set value of cell L_Numbers of column 7 to T3_Libelle end tell set L_Numbers to L_Numbers + 1 -- on assigne les nouvelles valeurs set T3_Date to Sup_Guillemets(text item 1 of Ligne_list) set T3_Nature to Sup_Guillemets(text item 2 of Ligne_list) set T3_Debit to Sup_Guillemets(text item 3 of Ligne_list) set T3_Credit to Sup_Guillemets(text item 4 of Ligne_list) set T3_Devise to Sup_Guillemets(text item 5 of Ligne_list) set T3_DateVal to Sup_Guillemets(text item 6 of Ligne_list) set T3_Libelle to Sup_Guillemets(text item 7 of Ligne_list) set Ligne_Pre to true else if Ligne_Pre then -- il y a une date valide dans une ligne précédente, donc on ajoute Nature à la valeur Nature de la ligne valide précédente set T3_Nature to T3_Nature & TSep & Sup_Guillemets(text item 2 of Ligne_list) end if end if end if end repeat tell application "Numbers" to tell first table of active sheet of front document set value of cell L_Numbers of column 1 to T3_Date set value of cell L_Numbers of column 2 to T3_Nature set value of cell L_Numbers of column 3 to T3_Debit set value of cell L_Numbers of column 4 to T3_Credit set value of cell L_Numbers of column 5 to T3_Devise set value of cell L_Numbers of column 6 to T3_DateVal set value of cell L_Numbers of column 7 to T3_Libelle end tell end Conversion on Date_Valide(S) -- renvoie True si S contient une date valide comme jj/mm/aaaa -- Attention: Applescript converti les dates avec une certaine flexibilité: par exemple le 33/05/2025 sera converti en 02/06/2025 !! if (count of S) is not 10 then return false try if day of (date S) > 31 then return false if month of (date S) > 12 then return false if (year of (date S) < 2000) or (year of (date S) > 2100) then return false -- je doute que cela soit utilisé après 2100 !! on error return false end try return true end Date_Valide on Sup_Guillemets(S) -- supprimer les guillemets au début et la la fin, si il y en a (code ASCII = 34) set S0 to S if id of first character of S is 34 then set S to text 2 thru -1 of S end if if id of last character of S is 34 then if (count of S) > 1 then set S to text 1 thru ((count of S) - 1) of S else set S to "" end if end if return S end Sup_Guillemets -------------------- iiMac 24 M1 16Go/1To 13.5.1
iMac 27 i5 3,1GHz 8Go/1To 10.11.6 / 10.6.8 iMac 20 C.Duo 2,6Ghz 8Go/350Go 10.6.8 / 10.11 Mini C.Duo 2,0Ghz 2Go/500Go 10.6.8 |
|
|
![]() ![]() |
Nous sommes le : 18th July 2025 - 03:56 |