1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
| 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 |
Partager