Aide création AppleScript

DoiY

Membre confirmé
3 Mai 2020
13
1
45
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
1 - What I got.webp2 - What I want.webp
 
Bonjour,

J'ai répondu à ton message sur le site "Macbidouille"
Je te remet le script ici...

Tu ouvres ton fichier csv dans numbers puis tu exécutes le script . Il crée une nouvelle feuille dans laquelle il copie les éléments suivant ta demande...

Tu testes , et tu me dis si cela te convient

Bloc de 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
 
Bonjour Zeltron54

:hushed: Magnifique...
Cela semble fonctionner parfaitement, je vais l'essayer sur un fichier original.
Est-il possible, lors du lancement de ce script, qu'il aille chercher le fichier qui est à l'origine au format .CSV, dans le dossier téléchargement du Mac?
Le fichier aura toujours le même nom disons 003600360036.csv.
J'aurais aussi besoin d'avoir aucun remplissage de couleur de cellule et aucune police grasse.

En attendant, merci beaucoup pour ce premier jet.:smiley:
 
Bonjour,
@Gerapp38 Je vois que tu es toujours très attentif :D :hand:

@DoiY
Essai ce script !

Numbers étant fermé.
Tu lances ce script, il ouvre ton fichier "003600360036.csv" qui doit se trouver dans ton dossier téléchargement.
Puis il copie les valeurs dans la nouvelle feuille qui n' a pas de colonne ni de ligne "titre" donc sans couleur et sans police grasse.

J'attend ton retour.

Bloc de code:
set chemin to ((path to home folder) & "downloads:003600360036.csv") as string
set chemin to chemin as alias

--créer une nouvelle feuille
tell application "Numbers"
    activate
    open chemin
    tell document 1
        make new sheet
        tell active sheet
            delete every table
            set thesheet to make new table with properties {row count:3, column count:8}
        end tell
    end tell
    tell the first table of sheet 2 of front document
        remove column 1
        remove row 1
    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
 
Merveilleux,

cela fonctionne comme un charme.
Voilà un script qui va me faire gagner beaucoup de temps, je t'en remercie infiniment.

Existe t-il un moyen plus rapide, pour lancer un script, que d'ouvrir AppleScript, comme la création d'un bouton par exemple?
Avec automator peut-être ?
 
Il te suffit d'enregistrer le script en tant qu' application. ensuite un simple double clic dessus le lancera.
Lors de la première utilisation il te demandera les autorisations système d'accès....

Pour l'enregistrer dans "Editeur de script" un "enregistrer sous" et dans la format choisir "application".
 
Bon OK, je considérais que seul le document concerné était ouvert.

Je modifie , et je travaille donc sur le document qui s'appelle "003600360036" Attention il devra toujours avoir ce nom !

voila le script modifié.
Bloc de code:
set mondoc to "003600360036"
set chemin to ((path to home folder) & "downloads:" & mondoc & ".csv") as string
set chemin to chemin as alias
set mondoc to "003600360036"

--créer une nouvelle feuille
tell application "Numbers"
    activate
    open chemin
    tell document mondoc
        make new sheet
        tell active sheet
            delete every table
            set thesheet to make new table with properties {row count:3, column count:8}
        end tell
    end tell
    tell the first table of sheet 2 of document mondoc
        remove column 1
        remove row 1
    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 document mondoc
            set titre to value of cell (lacolonne & "7")
            
        end tell
        tell the first table of sheet 2 of document mondoc
            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 document mondoc
        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 document mondoc
            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 document mondoc
            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 document mondoc
        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
 
Pas la moindre erreur :wave:.
Une dernière chose je l'espère :smile:.
Serait-il possible de faire en sorte que les colonnes:
ladate et datevaleur soient au format date et heure avec date sous la forme jj/mm/aaaa et heure sur aucun.
debit et credit soient au format devise, euros, avec deux décimales après la virgules.