IPB

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> Aide création AppleScript
Options
Bipbip33
posté 6 Feb 2025, 22:05
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)
Fichier joint  Fichiers.zip ( 70.4 Ko ) Nombre de téléchargements : 1
 
Go to the top of the page
 
+Quote Post
Phil J. Fry
posté 7 Feb 2025, 05:50
Message #2


The Original Martian <span style=
*****

Groupe : Modérateurs
Messages : 6 879
Inscrit : 25 May 2004
Lieu : sɹɐɯ ⅋ ʞɹoʎ ʍǝu ʍǝu ⅋ ǝssᴉns
Membre no 19 190



Ce n'est pas une question de débutant, je déplace dans le forum approprié.


--------------------
MBP 16" Sequoia 15.3.2MBA 13" Sonoma 14.6.1 MacBook Air 11" 10.9.5 MacBook 2Ghz 1Go X.6.4 blanc Mac Mini 1.25Ghz 1Go X.4.10 Spatule de 10,5 cm iPod shuffle 512 iPod mini 4GB iPod Nano 16GB
DBCM III Disciple du MSV Team BOINC Macbidouille
But I'm a creep, I'm a weirdo - What the hell am I doin here? - I don't belong here Radiohead
Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes - S'il n'y a pas de solution, c'est qu'il n'y a pas de problème - Devises Shadok
La connaissance, c'est savoir que la tomate est un fruit. La sagesse, c'est savoir qu'il ne faut pas la mettre dans une salade de fruit. B O'D
Go to the top of the page
 
+Quote Post
Zeltron54
posté 7 Feb 2025, 16:57
Message #3


Adepte de Macbidouille
*

Groupe : Membres
Messages : 184
Inscrit : 15 Mar 2008
Lieu : Lorraine
Membre no 110 156



Bonjour,

Tu peux essayer ça (fait en vitesse, pas optimisé !)

Tu ouvres ton fichier csv avec numbers et tu lances le script.
Il crée un nouvelle feuille et copie les mouvements en concatennant les "nature de l'opération"


Code
--créer une nouvelle feuille
tell application "Numbers"
    activate
    tell document 1
        make new sheet
        tell active sheet
            delete every table
            set thesheet to make new table with properties {row count:2, column count:7}
        end tell
    end tell
    
    -- copier les titres de colonnes
    set colonne to {"A", "B", "C", "D", "E", "F", "G"}
    repeat with i from 1 to 7
        
        set lacolonne to item i of colonne
        
        tell the first table of sheet 1 of front document
            set titre to value of cell (lacolonne & "7")
            
        end tell
        tell the first table of sheet 2 of front document
            set value of cell (lacolonne & "1") to titre
        end tell
    end repeat
end tell

set laligne to 8
set laligneplus to 8
set laligneB to 2

tell application "Numbers"
    activate
    tell the first table of sheet 1 of front document
        set nbligne to count row
    end tell
end tell


-- Concatenner et copier les mouvements
tell application "Numbers"
    activate
    
    repeat
        if laligne > nbligne then exit repeat
        tell the first table of sheet 1 of front document
            set ladate to value of cell ("A" & laligne)
            set nature to value of cell ("B" & laligne)
            
            repeat
                set laligneplus to laligneplus + 1
                if laligneplus > nbligne then exit repeat
                set x to value of cell ("A" & laligneplus)
                
                if x is missing value then
                    set nature to nature & " " & value of cell ("B" & laligneplus)
                else
                    exit repeat
                end if
            end repeat
            set debit to value of cell ("c" & laligne)
            set credit to value of cell ("D" & laligne)
            set devise to value of cell ("E" & laligne)
            set datevaleur to value of cell ("F" & laligne)
            set libelle to value of cell ("G" & laligne)
        end tell
        
        
        
        tell the first table of sheet 2 of front document
            set value of cell ("A" & laligneB) to ladate
            set value of cell ("B" & laligneB) to nature
            set value of cell ("C" & laligneB) to debit
            set value of cell ("D" & laligneB) to credit
            set value of cell ("E" & laligneB) to devise
            set value of cell ("F" & laligneB) to datevaleur
            set value of cell ("G" & laligneB) to libelle
            add row below last row
        end tell
        set laligneB to laligneB + 1
        set laligne to laligneplus
    end repeat
    
    
    tell the first table of sheet 2 of front document
        set value of cell ("A" & laligneB) to ladate
        set value of cell ("B" & laligneB) to nature
        set value of cell ("C" & laligneB) to debit
        set value of cell ("D" & laligneB) to credit
        set value of cell ("E" & laligneB) to devise
        set value of cell ("F" & laligneB) to datevaleur
        set value of cell ("G" & laligneB) to libelle
    end tell
    
end tell


Ce message a été modifié par Zeltron54 - 7 Feb 2025, 19:11.


--------------------
Imac 27 I7 Fusion drive fin 2013 Ram 8Go Mac OS X (10.14.6)
MacBook Pro 15 pouces mi-2012 8Go Ram Mac OS X (10.14.6)
Imac 24 M3 2023 Ram 24Go macOS Sequoia 15.3.2
Go to the top of the page
 
+Quote Post
PBell
posté 12 Feb 2025, 08:30
Message #4


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
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 23rd March 2025 - 11:05