Oigan todos,
Tratando de analizar su cerebro aquí y ver cuál sería el mejor camino para esta idea.
La idea es poder tomar todos los gráficos/tramas de un guión y enviarlos a PowerPoint. Me gustaría personalizar esto para poder arrastrar gráficos a la diapositiva y colocarlos, junto con el texto, fuera de PowerPoint y luego enviarlos a PowerPoint.
Actualmente tengo la primera parte toscamente hecha. Usando el Generador de aplicaciones pude crear una aplicación donde solicita al usuario un script, ejecuta el script, toma todas las ventanas abiertas desde el script y las coloca en una lista donde el usuario puede seleccionar a qué gráficos ir. a PPT.
Después de eso, tengo un VBscript al que se llama una vez que el usuario elige una plantilla. Cualquier gráfico guardado en HTML crea una carpeta GFX con el contenido de ese gráfico, y el script VB toma el contenido de esa carpeta GFX y lo coloca en PowerPoint.
Es muy tosco, un gráfico por diapositiva el usuario debe agregar texto en PowerPoint.
Mi pregunta es si crees que es la dirección correcta a seguir. Ayer hablé con algunas personas de JMP y mencionaron que otra forma de considerar es utilizar R. No tengo ninguna experiencia con R, pero si es un camino mejor o más eficiente, lo investigaría.
Para ampliar mi trabajo actual, tal vez podría simplemente crear una opción para que el usuario seleccione en qué parte del PowerPoint colocar el gráfico, junto con el texto. Pero no estaría seguro de cómo pasar eso al script VB.
Gracias de antemano por cualquier ayuda o idea. Todo es bienvenido.
-Mate
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />ok, lo hice por mí mismo, aquí tienes
Estos son módulos individuales, colócalos en un bucle más amplio o úsalos como quieras (y perdona mi inglés...)
*exportar desde jmp - imagen
genere su gráfico como de costumbre, creando una referencia al mismo (por ejemplo
Graph_reference = tabla de datos <
Luego guarda la imagen como de costumbre.
graph_reference <
*exportar desde jmp - texto
solo como prueba, coloque algo en sus variables, el uso real será que contengan la información que necesita exportar
string_containing_title1 = "primera fila";
string_containing_title2 = "\!Nsegunda fila";
Guardar archivo de texto("titles.txt",string_containing_title1, mode ("replace"));
Guardar archivo de texto("titles.txt",string_containing_title2, mode ("append"));
y ahora que tienes imágenes y texto, puedes importarlos directamente en powerpoint (presta atención al formato .pptm, seguridad de macros y esas cosas...)
este es el código VBA que importa una imagen y la coloca
' diapositivas de variables de definición
Atenuar oDeslizar como diapositiva
Número tenue como entero
Atenuar la imagen como forma
' Imágenes de variables de definición
Atenuar ImgFolder como cadena: ImgFolder = "C:\Users\john_ronald_reuel\Documents\toy_box\pet01\test_im\"
Dim piazza1 como cadena
Archivo tenue 1 como cadena
' valor establecido para fines de prueba, para uso real coloque un ciclo para definirlos, aquí ponemos 5831_pie.jpg en la diapositiva 02
archivo1 = "5831_pie.jpg"
número = 2
'creando ruta completa para archivos de imagen
plaza1 = (CarpetaImg y archivo1)
' configurando la diapositiva 02 como activa
Establecer oSlide = ActiveWindow.Presentation.Slides(numero)
'coloca la imagen, sin vínculo, con guardar, en las coordenadas 10,10 desde la parte superior izquierda, sin cambiar la escala
Establecer oPicture = oSlide.Shapes.AddPicture(piazza1, msoFalse, msoTrue, 10, 10)
'edición: utilice recortar y otros para recortar, colocar o cambiar la escala.
Con ActivePresentation.PageSetup
oImagen.PictureFormat.CropBottom = 30
oImagen.Altura = 450
oImagen.Izquierda = 450
Terminar con
notas a esto:
*puedes usar una ruta relativa con este código --> ImgFolder = ActivePresentation.Path & "\output\"
*la edición de imágenes es secuencial y no le gustan los números negativos: si desea recortar 40 y terminar en 10, no puede comenzar en -30 y recortar y detener, pero debe comenzar en 10, recortar y luego, después de usar, hacia la izquierda (o arriba). )
*piazza y numero se utilizan para que el código no esté cableado, pero este es un módulo único. será mejor que uses un ciclo y una matriz para almacenar nombres de imágenes y números de diapositivas
y aquí está el código para cargar la información exportada desde jmp y ponerla en una matriz, cada fila va a un elemento de la matriz
'variables de definición para ciclo
Dim ilivelli como entero
Atenuar i como entero
Temperatura tenue como cadena
'variables de definición para archivo de texto
Carpeta de índice tenue como cadena
Atenuar ImgFolder como cadena
Dim sFileName como cadena
Atenuar iFileNum como número entero
'carpeta de definición
carpeta de índice = "C:\Users\john_ronald_reuel\Documentos\toy_box\pet01\config\"
'definición de matriz dinámica, contendrá las filas del archivo de texto
Dim sparam() como cadena
'redimensionarlo grande
ReDim sparam(75) como cadena
'definir nombre de archivo
sFileName = carpeta de índice y "levels_DD.txt"
'cargar el archivo
iFileNum = ArchivoLibre()
Abra sFileName para ingresar como iFileNum
'ciclo de EOF: cargue la línea i-eth, póngala en temp, luego asígnela al elemento i-eth de la matriz, luego actualice el número entero ilivelli
yo = 1
Hacer mientras no sea EOF (iFileNum)
Entrada de línea #iFileNum, temp
sparam(i) = CStr(temp)
ilivelli = yo
yo = yo + 1
Bucle
'redimensiona la matriz al número correcto de filas, sin borrarla
ReDim Preservar sparam(ilivelli)
'cerrar el archivo original
Cerrar iFileNum
Esto está funcionando para mí, ¡espero que ayude!
Gracias por toda la información m477. Estaba buscando mantener esto autónomo en JMP, simplemente crear un complemento que pudiera instalar en cualquier máquina con JMP y poder ejecutarlo. Eso no está del todo escrito, por lo que si esta opción está completamente fuera de lugar, puedo trabajar con VBA.
El complemento actual que construí en JMP toma todos los gráficos abiertos y agrega los seleccionados a una carpeta. Entonces tengo una carpeta con todos los gráficos que quiero incluir en PPT. El siguiente paso que busco es una forma de personalización. Dentro del complemento jmp, quiero solicitar al usuario las propiedades de la diapositiva, incluida la cantidad de gráficos por diapositiva, el título de la diapositiva, el texto adicional y las posiciones de las diapositivas/texto.
Mi idea actual es solicitar todo esto en JMP, tomar todas las propiedades de la diapositiva y luego pasarlas a una macro VBA para que pueda ejecutar las propiedades de la diapositiva particulares.
¿Es posible pasar parámetros de JMP a la macro? Quizás guarde los parámetros de la diapositiva en algún tipo de archivo de texto.
¿Tiene una muy buena razón para no querer ejecutar desde PowerPoint?
Mi sugerencia sería escribir su aplicación JMP, hacer que realice el análisis y genere los gráficos que desee, y guardarlos como imágenes, completamente independientemente de la presentación que esté intentando crear. Luego, escriba una macro en PowerPoint que primero llame a su secuencia de comandos JMP para que se ejecute y luego tome las imágenes que creó de la carpeta especificada.
Digo esto porque formatear PowerPoint es muy sencillo en VBA (prácticamente lo único que ES fácil en VBA), porque tiene muchos métodos integrados y muchos ejemplos en línea sobre cómo usarlos.
la subrutina para llamar a JMP desde Powerpoint se vería así:
Subejecución públicaJSL()
Establecer MyJMP = CreateObject("JMP.Application")
MiJMP.Visible = Verdadero
MyJMP.RunJSLFile ("C:\
Subtítulo final
luego escribe otra subrutina VBA que llama a RunJSL y luego busca en una carpeta específica, agregando una diapositiva para cada imagen en esa carpeta, con la que puede hacer lo que quiera, por ejemplo:
Fotos secundarias públicas()
Atenuar oDeslizar como diapositiva
Atenuar la imagen como forma
Atenuar el título como forma
Dim ImgFldr como cadena: ImgFldr = "$Documentos\Trazar imágenes"
Atenuar el archivo actual como cadena
yo = 1
Llamar a RunJSL
ArchivoActual = Dir(ImgFldr & "\")
Hacer mientras archivo actual <> ""
Llamar a AddSlides(CurrentFile)
//formatear una nueva diapositiva con una nueva imagen, centrarla, escalarla, agregar un título, lo que sea
ActiveWindow.View.GotoSlide i
ArchivoActual = Dir()
yo = yo + 1
Bucle
Subtítulo final
EDITAR: También necesitarías escribir la subrutina AddSlides