applescript et insertion image dans excel, ou macro xl |
Bienvenue invité ( Connexion | Inscription )
applescript et insertion image dans excel, ou macro xl |
14 Sep 2014, 12:31
Message
#1
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 2 845 Inscrit : 23 Nov 2002 Membre no 4 808 |
bonjour
Je souhaite insérer dans excel (excel mac 2011) des images, placées dans un dossier et dont je connais le chemin. J'ai donc une colonne où je souhaite mettre l'image, une colonne avec le chemin et une colonne avec le nom de l'image (avec ou sans suffixe, ça je sais modifier ) j'ai bien "trouvé" (en 2 ou 3 heures - sur le net) un script qui répond en partie à ma question. Il importe les images, change la dimension des cellules, et laisse même les images "attachées" à la ligne où elles se trouvent. Les images sont importées suivant l'ordre de classement par nom dans le dossier. c'est presque parfait J'ai environ 2000 images pour 3000 lignes il y aura donc des lignes sans image, en rusant je peux faire un tri de façon à ce que les 2000 fiches devant recevoir une image soient en tête et bien rangées. J'ai quand même la crainte que le script foire un peu et que du coup je me retrouve avec des images insérées à la mauvaise ligne. Et vu le nombre et le fait que ces images sont importées mais pas renseignées (par leur nom par exemple) je crains de ne pas pouvoir vérifier. D'où la question : est-il possible de modifier ce sript, pour qu'à partir du nom de l'image (et sans doute de sont chemin) les images insérées colonne A correspondent bien à leurs références ? le script en question : Citation set imageFolder to (choose folder) tell application "Finder" set imageList to files of folder imageFolder end tell tell application "Microsoft Excel" set imageHeight to 140 set imageWidth to 280 set imageCount to count of imageList set theRange to range ("A1:B" & imageCount as string) of worksheet 1 of workbook 1 set thisStep to 0 set theLeft to left position of cell 4 of row 1 repeat with imageFile in imageList set theTop to (top of cell 4 of row (1 + thisStep)) set newPic to make new picture at beginning of worksheet 1 of workbook 1 with properties {file name:(imageFile as text), height:imageHeight, width:imageWidth, top:theTop, left position:theLeft, placement:placement move} set thisStep to thisStep + 1 end repeat set row height of theRange to imageHeight end tell -------------------- MBP 15 unibody 2,4 Ghz , 4Go ssd 256 Go, dual boot OSX10.9.5-Linux mint
MacMini late 2012, i7 2,3Ghz, 16Go, 2 ssd 1to, OSX Sonoma 14.4 (OpencoreLegacy Patcher 1,4.3) |
|
|
14 Sep 2014, 13:13
Message
#2
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 4 198 Inscrit : 1 Jan 2008 Lieu : Toulouse.cong Membre no 103 942 |
Un classeur Excel avec 2000 images ? Pas sûr que tu aies choisi le bon outil (rappelons qu'Excel est un tableur)… ça risque de ramer sérieusement, une fois tes images importées.
-------------------- |
|
|
14 Sep 2014, 13:30
Message
#3
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 2 845 Inscrit : 23 Nov 2002 Membre no 4 808 |
C'est pas moi qui choisi mais ces putains de c… de clients qui ont toujours raison , mais je ferais des petites images… bien crades
-------------------- MBP 15 unibody 2,4 Ghz , 4Go ssd 256 Go, dual boot OSX10.9.5-Linux mint
MacMini late 2012, i7 2,3Ghz, 16Go, 2 ssd 1to, OSX Sonoma 14.4 (OpencoreLegacy Patcher 1,4.3) |
|
|
14 Sep 2014, 15:24
Message
#4
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 2 964 Inscrit : 3 Nov 2005 Membre no 49 239 |
A mon avis tu n'as donné assez d'infirmation pour que l'on comprenne ton problème.
Quelles colonnes de l'excel permettent d'accéder à ces images ? Comment est la hiérarchie du/des dossier(s) qui contient les images Comment sont formés les noms des images ? |
|
|
Guest_JacqR_* |
14 Sep 2014, 18:11
Message
#5
|
Guests |
Bonjour,
Si vous avez déjà les noms des images dans Excel et que les images sont tous dans le même dossier: Pour avoir la bonne référence, on prends les noms des images dans Excel, après il suffit de prendre le fichier ayant ce nom dans le dossier des images, le script insére l'image dans la même rangée que le nom, si l'image n'existe pas on continue avec le nom dans la prochaine rangée. Code set imageFolder to (choose folder) getFilesFromList(imageFolder as text) on getFilesFromList(d) script o property l : {} end script set imageHeight to 140 set imageWidth to 280 tell application "Microsoft Excel" set o's l to value of range "B1:B3000" of worksheet 1 of workbook 1 -- la colonne qui contient les noms set theLeft to left position of cell 1 of row 1 set row height of range "A1:A3000" of worksheet 1 of workbook 1 to imageHeight -- la colonne pour insérer les images end tell set tc to count o's l repeat with i from 1 to tc set nom to item 1 of item i of o's l if nom is not "" then set fich to (d & nom) -- le chemin du dossier + le nom du fichier = le chemin du fichier try fich as alias -- erreur si ce fichier n'existe pas, on continue avec le prochain nom dans la liste tell application "Microsoft Excel" to make new picture at beginning of worksheet 1 of workbook 1 with properties {file name:fich, height:imageHeight, width:imageWidth, top:(top of cell 1 of row i), left position:theLeft, placement:placement move} end try end if end repeat end getFilesFromList Il suffit de modifier les ranges dans le script selon votre feuille dans Excel (dans le script actuel, les noms des images sont dans la deuxième colonne, rangée 1 à 3000, les images seront insérer dans la première colonne.) Si il y a des cellules de vide (aucun nom) , il n'y aura aucun problème avec ce script. Si les noms des images dans Excel ne contient pas son extension, remplace set fich to (d & nom) par set fich to (d & nom & ".jpg") -- si c'est des JPEG Edition dans le script : Code set nom to item 1 of item i of o's l
Ce message a été modifié par JacqR - 15 Sep 2014, 14:00. |
|
|
15 Sep 2014, 07:02
Message
#6
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 2 845 Inscrit : 23 Nov 2002 Membre no 4 808 |
merci à vous deux, on dirait que j'ai pris un abonnement…
@noop tout est rangé comme il faut @ JacqR c'est parfait, faut juste bien penser à adapter la plage de lecture des noms dans excel au nombre de lignes sinon un message d'erreur excel (une erreur s'est produite pendant l'importation suivi du chemin du dossier) apparait autant de fois qu'il y a de ligne vide. Si je voulais pinailler ce serait mieux qu'en l'absence de ref d'image la taille de la ligne ne soit pas modifiée, mais je vais m'arranger pour qu'il y ait bien une image à chaque fois . Pour préciser le contexte, les images sont référencées dans aperture (donc laissées dans un dossier et exportable ou je veux dans le format que je veux), à partir de là comme je travaille ma base avec FMPro (c'est le client qui veux de l'excel) j'importe les images (à la bonne taille et en "dur") dans FMP en les mettant là où il faut, puis j'ai un script qui me permet de les exporter dans un nouveau dossier, avec un nouveau nom (suivant une série séquentielle demandée par le client : insee de la commune + n° séquentiel dans la commune ce que je calcule dans FMP), ensuite j'exporte la base dans excel comme il n'y que du texte ça ne pose pas de soucis. Ne reste (ne restait) plus qu'à voir comment importer les images dans excel. Le processus est sans doute améliorable, mais d'une part je n'ai pas ça à faire tous les jours, et d'autre part ça me permet, à part le script d'import dans excel de rester à mon niveau de compétence. Merci encore. ps : pour l'autre question que j'avais posée (changement des IPTC) c'est un petit plus pour le client… comme ça il pourra voir à quoi correspondent les images qui ne sont pas "intégrées" dans excel, j'ai oublié de dire que je choisi une image de référence par fiche, c'est celle qui apparaitra dans excel, mais il y en a d'autres qui sont rangées ailleurs… -------------------- MBP 15 unibody 2,4 Ghz , 4Go ssd 256 Go, dual boot OSX10.9.5-Linux mint
MacMini late 2012, i7 2,3Ghz, 16Go, 2 ssd 1to, OSX Sonoma 14.4 (OpencoreLegacy Patcher 1,4.3) |
|
|
Guest_JacqR_* |
15 Sep 2014, 14:07
Message
#7
|
Guests |
Bonjour,
@ JacqR c'est parfait, faut juste bien penser à adapter la plage de lecture des noms dans excel au nombre de lignes sinon un message d'erreur excel (une erreur s'est produite pendant l'importation suivi du chemin du dossier) apparait autant de fois qu'il y a de ligne vide. Si je voulais pinailler ce serait mieux qu'en l'absence de ref d'image la taille de la ligne ne soit pas modifiée, mais je vais m'arranger pour qu'il y ait bien une image à chaque fois . OK, j'avais oublié que les valeurs d'un range était une liste dans un liste , donc Excel tentait d'insérer un dossier quand la cellule était vide, la ligne dans le script devrait être --> set nom to item 1 of item i of o's l au lieu set nom to item i of o's l Voici un nouveau script : Il n'y aura pas d'erreur dans Excel, si la cellule est vide (pas de nom). Code set depart to 1 -- la rangée où on commence
set arret to 3000 -- la rangée où on arrête set colName to 2 -- le numéro de la colonne des noms set colImage to 1 -- le numéro de la colonne des images set imageHeight to 140 set imageWidth to 280 set imageFolder to (choose folder) getFilesFromList(imageFolder as text, depart, arret, colName, colImage, imageWidth, imageHeight) on getFilesFromList(d, sta, sto, colN, colI, w, h) tell application "Microsoft Excel" set theLeft to left position of cell colI of row sta repeat with i from sta to sto set nom to value of cell colN of row i if nom is not "" then set fich to (d & nom) -- le chemin du dossier + le nom du fichier = le chemin du fichier try fich as alias -- erreur si ce fichier n'existe pas, on continue avec le prochain nom dans la liste make new picture at beginning of worksheet 1 of workbook 1 with properties {file name:fich, height:h, width:w, top:(top of cell colI of row i), left position:theLeft, placement:placement move} set row height of cell colI of row i to h end try end if end repeat end tell end getFilesFromList Ce message a été modifié par JacqR - 15 Sep 2014, 14:11. |
|
|
15 Sep 2014, 14:16
Message
#8
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 2 845 Inscrit : 23 Nov 2002 Membre no 4 808 |
trop fort, merci encore
-------------------- MBP 15 unibody 2,4 Ghz , 4Go ssd 256 Go, dual boot OSX10.9.5-Linux mint
MacMini late 2012, i7 2,3Ghz, 16Go, 2 ssd 1to, OSX Sonoma 14.4 (OpencoreLegacy Patcher 1,4.3) |
|
|
3 Nov 2014, 19:09
Message
#9
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 2 845 Inscrit : 23 Nov 2002 Membre no 4 808 |
bonsoir
j'ai un petit soucis avec ces scripts, le premier fait chier avec des messages d'erreurs lorsque le nom de l'image n'est pas dans le doc excel, ce que JacqRa bien pris en compte dans le second, qui en plus n'agrandi que les lignes nécessaires, donc super… mais… avec le premier les images se déplacent lorsque je fais un tri sur une colonne (càd qu'elle restent dans la bonne ligne), avec le second elles restent en place (càd n'importe où après le tri), je ne comprends pas pourquoi et je bloque… j'espère que ce n'est pas à cause du passage de 10.9 à 10.10… si quelqu'un a un tuyau… je prends merci ps : xl 14.0.0 Ce message a été modifié par ades - 3 Nov 2014, 19:11. -------------------- MBP 15 unibody 2,4 Ghz , 4Go ssd 256 Go, dual boot OSX10.9.5-Linux mint
MacMini late 2012, i7 2,3Ghz, 16Go, 2 ssd 1to, OSX Sonoma 14.4 (OpencoreLegacy Patcher 1,4.3) |
|
|
Guest_JacqR_* |
3 Nov 2014, 21:36
Message
#10
|
Guests |
Bonsoir,
avec le second elles restent en place (càd n'importe où après le tri), je ne comprends pas pourquoi et je bloque… j'espère que ce n'est pas à cause du passage de 10.9 à 10.10… si quelqu'un a un tuyau… je prends merci ps : xl 14.0.0 Je n'avais pas testé le tri. Je viens juste de tester le tri, effectivement cela ne fonctionne pas, même pas sur Mavericks ou Leopard. Voici la solution qui fonctionne ici : la différence est dans le bloc try : placement move and size au lieu de placement move, et déplacement de la ligne qui ajuste la hauteur de la rangée juste avant l'importation de l'image. Aussi, lors du tri, il faut s'assurer que la colonne des images est sélectionnée, car ici Excel étend la sélection que sur les colonnes autres que la colonne des images. Code set depart to 1 -- la rangée où on commence
set arret to 10 -- la rangée où on arrête set colName to 2 -- le numéro de la colonne des noms set colImage to 1 -- le numéro de la colonne des images set imageHeight to 140 set imageWidth to 280 set imageFolder to (choose folder) getFilesFromList(imageFolder as text, depart, arret, colName, colImage, imageWidth, imageHeight) on getFilesFromList(d, sta, sto, colN, colI, w, h) tell application "Microsoft Excel" set theLeft to left position of cell colI of row sta repeat with i from sta to sto set nom to value of cell colN of row i if nom is not "" then set fich to (d & nom) -- le chemin du dossier + le nom du fichier = le chemin du fichier try fich as alias -- erreur si ce fichier n'existe pas, on continue avec le prochain nom dans la liste set row height of row i to h make new picture at beginning of worksheet 1 of workbook 1 with properties {file name:fich, height:h, width:w, top:(top of cell colI of row i), left position:theLeft, placement:placement move and size} end try end if end repeat end tell end getFilesFromList |
|
|
3 Nov 2014, 22:04
Message
#11
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 2 845 Inscrit : 23 Nov 2002 Membre no 4 808 |
Merci, je testerais demain, un peu tard ast'heur…
et tiendrais au courant. -------------------- MBP 15 unibody 2,4 Ghz , 4Go ssd 256 Go, dual boot OSX10.9.5-Linux mint
MacMini late 2012, i7 2,3Ghz, 16Go, 2 ssd 1to, OSX Sonoma 14.4 (OpencoreLegacy Patcher 1,4.3) |
|
|
4 Nov 2014, 06:16
Message
#12
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 2 845 Inscrit : 23 Nov 2002 Membre no 4 808 |
raté…
le script ne veux pas s'enregistrer en tant que script : Citation "erreur de syntaxe : « end » prévu(s) mais jeton inconnu trouvé(s). " et si je le lance, ce message apparait alors que le curseur est au début de la ligne Citation tell application "Microsoft Excel" pourtant il me semble que jusque là il n'y a pas de différence avec la version précédente… -------------------- MBP 15 unibody 2,4 Ghz , 4Go ssd 256 Go, dual boot OSX10.9.5-Linux mint
MacMini late 2012, i7 2,3Ghz, 16Go, 2 ssd 1to, OSX Sonoma 14.4 (OpencoreLegacy Patcher 1,4.3) |
|
|
4 Nov 2014, 12:36
Message
#13
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 2 845 Inscrit : 23 Nov 2002 Membre no 4 808 |
j'ai ajouté le choix du fichier au début et ça fonctionne, sauf que la taille des cellules n'est pas conservé lors d'un tri càd que le tri fonctionne, les images bouges, mais comme les cellules où il n'y a pas d'image n'ont pas changée de place…
si il y a une solution tant mieux, mais j'en doute un peu ;-) merci en tous cas. -------------------- MBP 15 unibody 2,4 Ghz , 4Go ssd 256 Go, dual boot OSX10.9.5-Linux mint
MacMini late 2012, i7 2,3Ghz, 16Go, 2 ssd 1to, OSX Sonoma 14.4 (OpencoreLegacy Patcher 1,4.3) |
|
|
Guest_JacqR_* |
4 Nov 2014, 22:19
Message
#14
|
Guests |
j'ai ajouté le choix du fichier au début et ça fonctionne, sauf que la taille des cellules n'est pas conservé lors d'un tri càd que le tri fonctionne, les images bouges, mais comme les cellules où il n'y a pas d'image n'ont pas changée de place… si il y a une solution tant mieux, mais j'en doute un peu ;-) merci en tous cas. Je viens de tester sur Excel Version 14.4.5, j'obtient le même comportement que toi, alors que sur la version (Office 2004) cela fonctionne bien avec le script de mon avant-dernier message. Pour que le tri (avec des images) fonctionne bien sur Excel Version 14.4.5, voici la seule solution que je connaisse : La hauteur des lignes doivent être égaux, voici le script Code set depart to 1 -- la rangée où on commence
set arret to 3000 -- la rangée où on arrête set colName to 2 -- le numéro de la colonne des noms set colImage to 1 -- le numéro de la colonne des images set imageHeight to 140 set imageWidth to 280 set imageFolder to (choose folder) getFilesFromList(imageFolder as text, depart, arret, colName, colImage, imageWidth, imageHeight) on getFilesFromList(d, sta, sto, colN, colI, w, h) tell application "Microsoft Excel" set row height of range ("A" & sta & ":A" & sto) of worksheet 1 of workbook 1 to h set theLeft to left position of cell colI of row sta repeat with i from sta to sto set nom to value of cell colN of row i if nom is not "" then set fich to (d & nom) -- le chemin du dossier + le nom du fichier = le chemin du fichier try fich as alias -- erreur si ce fichier n'existe pas, on continue avec le prochain nom dans la liste make new picture at beginning of worksheet 1 of workbook 1 with properties {file name:fich, height:h, width:w, top:(top of row i), left position:theLeft, placement:placement move} end try end if end repeat end tell end getFilesFromList Ce message a été modifié par JacqR - 4 Nov 2014, 22:20. |
|
|
Guest_JacqR_* |
5 Nov 2014, 20:50
Message
#15
|
Guests |
Bonjour,
Voici une solution pour que la taille de la rangée et le tri fonctionne correctement sur Excel Version 14.4.5, mais vous avez besoin d'une macro pour cela. L'AppleScript Code set depart to 1 -- la rangée où on commence set arret to 3000 -- la rangée où on arrête set colName to 2 -- le numéro de la colonne des noms set colImage to 1 -- le numéro de la colonne des images set imageHeight to 140 set imageWidth to 280 set imageFolder to (choose folder) getFilesFromList(imageFolder as text, depart, arret, colName, colImage, imageWidth, imageHeight) on getFilesFromList(d, sta, sto, colN, colI, w, h) tell application "Microsoft Excel" set screen updating to false -- to speed up the AppleScript code. set theLeft to left position of cell colI of row sta repeat with i from sta to sto set nom to value of cell colN of row i if nom is not "" then set fich to (d & nom) -- le chemin du dossier + le nom du fichier = le chemin du fichier try fich as alias -- erreur si ce fichier n'existe pas, on continue avec le prochain nom dans la liste set row height of row i to h -- + 4 set r to make new picture at beginning of worksheet 1 of workbook 1 with properties {file name:fich, height:h, width:w, top:top of row i, left position:theLeft, placement:placement move} set value of cell colI of row i to 1 on error set value of cell colI of row i to 0 end try else set value of cell colI of row i to 0 end if end repeat set screen updating to true end tell end getFilesFromList La macro dans thisWorkbook : Code Private Sub Workbook_SheetCalculate(ByVal Sh As Object) Application.ScreenUpdating = False Application.EnableEvents = False For i = 1 To ActiveSheet.UsedRange.Rows.Count If Cells(i, 1).Value > 0 Then Rows(i).RowHeight = 140 Else Rows(i).RowHeight = 14 End If Next i Application.EnableEvents = True Application.ScreenUpdating = True End Sub Vous devez changer le nombre dans Cells(i, 1) par le numéro de la colonne des images. (le nombre 1 est la première colonne) Vous devez changer le nombre dans Rows(i).RowHeight = 140 par la hauteur désirée (140 s'il y a une image, 14 s'il n'y a pas d'image). La macro s'exécutera automatiquement lorsque vous allez trier une feuille ou lors d'un calcul, vous avez besoin d'au moins d'une cellule avec une formule, si la feuille me contient aucune formule, il suffit de mettre cette formule =COLONNE(A1) par exemple dans une cellule qui ne servira pas. Aussi, si vous supprimer manuellement une image dans la feuille, pour que la macro continue de fonctionner correctement, il faut supprimé le nombre 1 dans la cellule derriere l'image. Edition : si vous préférez lancer un script AppleScript manuellement au lieu d'avoir une macro, c'est possible. Ce message a été modifié par JacqR - 5 Nov 2014, 20:57. |
|
|
5 Nov 2014, 21:05
Message
#16
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 2 845 Inscrit : 23 Nov 2002 Membre no 4 808 |
merci encore, je viens de rentrer et j'avoue que je n'est pas le courage de tester ce soir…
je tiendrai au courant, le script ne me pose pas de questions a priori, la macro un peu plus, mais faut que je m'y colle avant de savoir… ;-) edit : mais, comme c'est parti, j'attends encore un peu, sans poser de nouvelle questions, et j'aurai un script qui fait tout à la fois… (fin du mode plaisanterie douteuse… surout que vu la qualité ds infos reçues je f'rais meiux de fermer ma gueule ) Ce message a été modifié par ades - 5 Nov 2014, 21:09. -------------------- MBP 15 unibody 2,4 Ghz , 4Go ssd 256 Go, dual boot OSX10.9.5-Linux mint
MacMini late 2012, i7 2,3Ghz, 16Go, 2 ssd 1to, OSX Sonoma 14.4 (OpencoreLegacy Patcher 1,4.3) |
|
|
Nous sommes le : 23rd April 2024 - 14:53 |