Salut à tous,
J'essaie de choisir votre cerveau ici et de voir quelle serait la meilleure voie pour cette idée.
L'idée est de pouvoir prendre tous les graphiques/tracés d'un script et les insérer dans PowerPoint. Je voudrais personnaliser cela pour pouvoir faire glisser des graphiques vers la diapositive et les positionner, avec le texte, en dehors de PowerPoint, puis les pousser vers PowerPoint.
J'ai actuellement la première partie grossièrement réalisée. À l'aide d'Application Builder, j'ai pu créer une application dans laquelle elle invite l'utilisateur à entrer un script, exécute le script, récupère toutes les fenêtres ouvertes à partir du script, les jette dans une liste où l'utilisateur peut sélectionner les graphiques à afficher. au PPT.
Après cela, j'ai un VBscript qui est appelé une fois que l'utilisateur choisit un modèle. Tout graphique enregistré au format HTML crée un dossier GFX avec le contenu de ce graphique, et le script VB récupère le contenu de ce dossier GFX et le jette dans PowerPoint.
C'est très brut, un graphique par diapositive, l'utilisateur doit ajouter du texte dans PowerPoint.
Ma question est de savoir si vous pensez que c'est la bonne direction à prendre. J'ai parlé hier avec des personnes chez JMP et elles ont mentionné qu'une autre voie à étudier consiste à utiliser R. Je n'ai aucune expérience avec R, mais si c'est un chemin meilleur/plus efficace à suivre, je l'examinerais.
Pour développer mon travail actuel, je pourrais peut-être simplement créer une option permettant à l'utilisateur de sélectionner la partie du PowerPoint dans laquelle placer le graphique, avec le texte. Mais je ne sais pas comment transmettre cela au script VB.
Merci d'avance pour toute aide ou idée. Tout est le bienvenu.
-Mat
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />ok, je l'ai fait pour moi, te voilà
ce sont des modules uniques, mettez-les dans une boucle plus large ou utilisez-les comme bon vous semble (et pardonnez mon anglais...)
*exporter depuis jmp - image
générez votre graphique comme d'habitude, en créant une référence à celui-ci (par exemple
graph_reference = datatable <
puis enregistrez l'image comme d'habitude
graph_reference <
*exporter depuis jmp - texte
juste pour tester, mettez quelque chose dans vos variables, la véritable utilité sera qu'elles contiennent les informations dont vous avez besoin pour exporter
string_containing_title1 = "première ligne" ;
string_containing_title2 = "\!Ndeuxième ligne";
Enregistrer le fichier texte("titles.txt",string_containing_title1, mode ("remplacer"));
Enregistrer le fichier texte("titles.txt",string_containing_title2, mode ("append"));
et maintenant que vous avez des images et du texte, vous pouvez les importer directement dans powerpoint (faites attention au format .pptm, à la sécurité des macros et tout ça...)
c'est le code VBA qui importe une image et la place
' diapositives de variables de définition
Atténuer oSlide comme diapositive
Faible nombre sous forme d'entier
Atténuer l'image en tant que forme
' définition des variables images
Dim ImgFolder As String : ImgFolder = "C:\Users\john_ronald_reuel\Documents\toy_box\pet01\test_im\"
Dim piazza1 comme chaîne
Dim file1 en tant que chaîne
'valeur définie à des fins de test, pour une utilisation réelle, mettez en place un cercle pour les définir, ici nous mettons 5831_pie.jpg dans la diapositive 02
fichier1 = "5831_pie.jpg"
numéro = 2
' création du chemin complet pour les fichiers image
piazza1 = (ImgDossier & fichier1)
' définition de la diapositive 02 comme active
Définir oSlide = ActiveWindow.Presentation.Slides (numéro)
' placer l'image, pas de lien, avec sauvegarde, aux coordonnées 10,10 en haut à gauche, pas de redimensionnement
Définir oPicture = oSlide.Shapes.AddPicture(piazza1, msoFalse, msoTrue, 10, 10)
' édition : utilisez le recadrage et d'autres pour recadrer, placer ou redimensionner.
Avec ActivePresentation.PageSetup
oPicture.PictureFormat.CropBottom = 30
oImage.Hauteur = 450
oImage.Gauche = 450
Terminer par
note à ceci :
*vous pouvez utiliser un chemin relatif avec ce code --> ImgFolder = ActivePresentation.Path & "\output\"
*l'édition d'image est séquentielle et n'aime pas les nombres négatifs : si vous voulez recadrer 40 et terminer à 10, vous ne pouvez pas commencer à -30 et recadrer et arrêter, mais vous devez commencer à 10, recadrer puis après utilisation à gauche (ou en haut )
*piazza et numero sont utilisés pour que le code ne soit pas câblé, mais il s'agit d'un seul module. vous feriez mieux d'utiliser un cercle et un tableau pour stocker les noms d'images et les numéros de diapositives
et voici le code pour charger les infos exportées depuis jmp et les mettre dans un tableau, chaque ligne va à un élément du tableau
'Variables de définition pour le cycle
Dim ilivelli comme entier
Dim i comme entier
Dim temp en tant que chaîne
'Variables de définition pour le fichier texte
Dim dossier d'index en tant que chaîne
Dim ImgFolder en tant que chaîne
Dim sFileName As String
Dim iFileNum comme entier
'dossier de définition
indexfolder = "C:\Users\john_ronald_reuel\Documents\toy_box\pet01\config\"
'tableau dynamique de définition, contiendra les lignes du fichier texte
Dim sparam() en tant que chaîne
'redimensionnez-le en grand
ReDim sparam (75) en tant que chaîne
'définir le nom du fichier
sFileName = dossier d'index & "levels_DD.txt"
'charger le fichier
iFileNum = FreeFile()
Ouvrez sFileName pour la saisie en tant que iFileNum
'cicle do EOF : charge la ligne i-eth, mets-la en temp, puis assigne-la à l'élément i-eth du tableau, puis mets à jour l'entier ilivelli
je = 1
Faire sans EOF (iFileNum)
Entrée de ligne #iFileNum, temp
sparam(i) = CStr(temp)
ilivelli = je
je = je + 1
Boucle
'redimensionner le tableau au nombre correct de lignes, sans l'effacer
ReDim Preserve sparam (ilivelli)
'ferme le fichier d'origine
Fermer iFileNum
ça marche pour moi, j'espère que ça aide !
Merci pour toutes les infos m477. Je cherchais à garder cela autonome dans JMP, il suffit de créer un complément que je pourrais installer sur n'importe quelle machine avec JMP et le faire exécuter. Ce n’est pas entièrement gravé dans le marbre, donc si cette option est complètement hors de propos, je peux travailler avec VBA.
Le complément actuel que j'ai intégré dans JMP récupère tous les tracés ouverts et ajoute ceux sélectionnés à un dossier. J'ai donc un dossier de toutes les intrigues que je souhaite intégrer dans PPT. La prochaine étape que je recherche est une forme de personnalisation. Dans le complément jmp, je souhaite demander à l'utilisateur les propriétés de la diapositive, y compris le nombre de graphiques par diapositive, le titre de la diapositive, le texte supplémentaire et les positions des diapositives/texte.
Mon idée actuelle est de demander tout cela dans JMP, de récupérer toutes les propriétés de la diapositive, puis de les transmettre dans une macro VBA afin qu'elle puisse exécuter les propriétés particulières de la diapositive.
Est-il possible de passer des paramètres de JMP à la macro ? Peut-être enregistrer les paramètres de la diapositive dans un fichier texte quelconque
Avez-vous une très bonne raison de ne pas vouloir exécuter à partir de PowerPoint ?
Ma suggestion serait d'écrire votre application JMP, de lui faire effectuer l'analyse et de générer les graphiques souhaités, puis de les enregistrer sous forme d'images, totalement indépendantes de la présentation que vous essayez de créer. Ensuite, écrivez une macro dans PowerPoint qui appelle d'abord votre script JMP à exécuter, puis récupère les images qu'il a créées à partir du dossier spécifié.
Je dis cela parce que le formatage dans PowerPoint est un jeu d'enfant dans VBA (à peu près la seule chose qui EST facile dans VBA), car il contient de nombreuses méthodes intégrées et de nombreux exemples en ligne sur la façon de les utiliser.
le sous-programme pour appeler JMP depuis Powerpoint ressemblerait à ceci :
Sous-RunJSL public()
Définir MyJMP = CreateObject("JMP.Application")
MonJMP.Visible = True
MyJMP.RunJSLFile ("C:\
Fin du sous-marin
Ensuite, vous écrivez un autre sous-programme VBA qui appelle RunJSL, puis recherchez dans un dossier spécifié, en ajoutant une diapositive pour chaque image de ce dossier, avec laquelle vous pouvez faire ce que vous voulez, par exemple :
Sous-marin public MakePics()
Atténuer oSlide comme diapositive
Atténuer l'image en tant que forme
Dim oTitre comme forme
Dim ImgFldr As String : ImgFldr = "$Documents\Plot Images"
Dim CurrentFile comme chaîne
je = 1
Appeler RunJSL
FichierActuel = Dir(ImgFldr & "\")
Faire While CurrentFile <> ""
Appeler AddSlides (CurrentFile)
// formater une nouvelle diapositive avec une nouvelle image, la centrer, la redimensionner, ajouter un titre, peu importe
ActiveWindow.View.GotoSlide i
FichierActuel = Rép()
je = je + 1
Boucle
Fin du sous-marin
EDIT : vous devrez également écrire le sous-programme AddSlides