Necesito automatizar la creación de una presentación (ya sea OpenOffice o Powerpoint). La presentación debe tomar las dos primeras diapositivas de cada una de las presentaciones en un directorio determinado, y luego combinarlas en una sola presentación. Estoy confundido en cuanto a qué enfoque debo tomar para resolver esto. Cualquier puntero será apreciado.Combinación programática de diapositivas de presentaciones múltiples en una sola presentación
Respuesta
Hablando de PowerPoint, se utiliza una macro de VBA para hacer el trabajo, algo así como
Sub Pull()
Dim SrcDir As String, SrcFile As String
SrcDir = PickDir()
If SrcDir = "" Then Exit Sub
SrcFile = Dir(SrcDir & "\*.ppt")
Do While SrcFile <> ""
ImportFromPPT SrcDir + "\" + SrcFile, 1, 2
SrcFile = Dir()
Loop
End Sub
Selección de su directorio de origen puede utilizar esta función
Private Function PickDir() As String
Dim FD As FileDialog
PickDir = ""
Set FD = Application.FileDialog(msoFileDialogFolderPicker)
With FD
.Title = "Pick a directory to work on"
.AllowMultiSelect = False
.Show
If .SelectedItems.Count <> 0 Then
PickDir = .SelectedItems(1)
End If
End With
End Function
ahora - el punto principal es insertar diapositivas de otro PPT mientras preservar el formato de origen. Esto es algo complicado, ya que el método PPT VBA InsertFromFile
no sirve para nada. Microsoft nos dio un buen momento para resolverlo de la peor manera en innumerables sesiones de depuración de 20 horas :-) y necesita escribir un montón de código para hacerlo correctamente, mucho más complicado que usar el diálogo manualmente, en particular si su fuente de diapositivas se desvía de la diapositiva maestra de origen.
Si las de PPT están pegando a sus amos, se puede omitir de forma segura todo el código entre el ">>>>"
Private Sub ImportFromPPT(FileName As String, SlideFrom As Long, SlideTo As Long)
Dim SrcPPT As Presentation, SrcSld As Slide, Idx As Long, SldCnt As Long
Set SrcPPT = Presentations.Open(FileName, , , msoFalse)
SldCnt = SrcPPT.Slides.Count
If SlideFrom > SldCnt Then Exit Sub
If SlideTo > SldCnt Then SlideTo = SldCnt
For Idx = SlideFrom To SlideTo Step 1
Set SrcSld = SrcPPT.Slides(Idx)
SrcSld.Copy
With ActivePresentation.Slides.Paste
.Design = SrcSld.Design
.ColorScheme = SrcSld.ColorScheme
' if slide is not following its master (design, color scheme)
' we must collect all bits & pieces from the slide itself
' >>>>>>>>>>>>>>>>>>>>
If SrcSld.FollowMasterBackground = False Then
.FollowMasterBackground = False
.Background.Fill.Visible = SrcSld.Background.Fill.Visible
.Background.Fill.ForeColor = SrcSld.Background.Fill.ForeColor
.Background.Fill.BackColor = SrcSld.Background.Fill.BackColor
' inspect the FillType object
Select Case SrcSld.Background.Fill.Type
Case Is = msoFillTextured
Select Case SrcSld.Background.Fill.TextureType
Case Is = msoTexturePreset
.Background.Fill.PresetTextured (SrcSld.Background.Fill.PresetTexture)
Case Is = msoTextureUserDefined
' TextureName gives a filename w/o path
' not implemented, see picture handling
End Select
Case Is = msoFillSolid
.Background.Fill.Transparency = 0#
.Background.Fill.Solid
Case Is = msoFillPicture
' picture cannot be copied directly, need to export and re-import slide image
If SrcSld.Shapes.Count > 0 Then SrcSld.Shapes.Range.Visible = False
bMasterShapes = SrcSld.DisplayMasterShapes
SrcSld.DisplayMasterShapes = False
SrcSld.Export SrcPPT.Path & SrcSld.SlideID & ".png", "PNG"
.Background.Fill.UserPicture SrcPPT.Path & SrcSld.SlideID & ".png"
Kill (SrcPPT.Path & SrcSld.SlideID & ".png")
SrcSld.DisplayMasterShapes = bMasterShapes
If SrcSld.Shapes.Count > 0 Then SrcSld.Shapes.Range.Visible = True
Case Is = msoFillPatterned
.Background.Fill.Patterned (SrcSld.Background.Fill.Pattern)
Case Is = msoFillGradient
' inspect gradient type
Select Case SrcSld.Background.Fill.GradientColorType
Case Is = msoGradientTwoColors
.Background.Fill.TwoColorGradient
SrcSld.Background.Fill.GradientStyle , _
SrcSld.Background.Fill.GradientVariant
Case Is = msoGradientPresetColors
.Background.Fill.PresetGradient _
SrcSld.Background.Fill.GradientStyle, _
SrcSld.Background.Fill.GradientVariant, _
SrcSld.Background.Fill.PresetGradientType
Case Is = msoGradientOneColor
.Background.Fill.OneColorGradient _
SrcSld.Background.Fill.GradientStyle, _
SrcSld.Background.Fill.GradientVariant, _
SrcSld.Background.Fill.GradientDegree
End Select
Case Is = msoFillBackground
' Only shapes - we shouldn't come here
End Select
End If
' >>>>>>>>>>>>>>>>>>>>
End With
Next Idx
End Sub
El código no comprueba la fies protegidos con contraseña de sólo lectura o y voluntad chocar con ellos. También tenga cuidado de no ejecutar el archivo del recopilador. De lo contrario, debería funcionar. Debo admitir que no he revisado el código durante mucho tiempo ;-)
Puede google "unirse a powerpoint" para encontrar una herramienta útil para unir muchos ppts.
- 1. Presentación de diapositivas de imágenes en android
- 2. Combinación de fusiones en una sola combinación
- 3. Hacer una presentación de diapositivas en bucle sin JavaScript jQuery
- 4. diapositivas de la presentación HTML con sintaxis de Python destacando
- 5. ¿Hay alguna manera de pasar una función de inicialización a una presentación de diapositivas de Orbit?
- 6. ¿Cuáles son las opciones para una forma independiente de navegador de hacer presentaciones de diapositivas web con audio?
- 7. Combinación de métodos S4 y S3 en una sola función
- 8. Combinación de varias plantillas de Django en una sola solicitud
- 9. extraer mediante programación diapositivas como imágenes de una presentación de PowerPoint (PPT)
- 10. Buscando una presentación de diapositivas de imagen móvil jQuery compatible con PhoneGap
- 11. La combinación de estas dos expresiones regulares en una sola
- 12. Impedir presentaciones de formularios múltiples en MVC 3 con validación
- 13. Sin usar jquery, cómo recorrer las imágenes para hacer una presentación de diapositivas simple
- 14. Control de PowerPoint Presentación
- 15. Qt evento de combinación de teclas múltiples
- 16. Múltiples instancias de una sola DLL MEF
- 17. Combinación de pseudo-selectores múltiples
- 18. C# - forma de avanzar programáticamente la presentación de diapositivas de Powerpoint?
- 19. Usando múltiples fragmentos en una sola actividad
- 20. Actualizar valores múltiples en una sola instrucción
- 21. Javadoc múltiples variables en una sola línea
- 22. Múltiples etiquetas h1 en una sola página
- 23. la combinación de múltiples atributos en C#
- 24. Combinación de múltiples repositorios SVN en uno
- 25. Pantalla de presentación de subprocesos múltiples en C#?
- 26. Múltiples declaraciones SQL de actualización en una sola consulta
- 27. JAXB desmaterialización de múltiples elementos XML en una sola clase
- 28. jQuery, múltiples grupos de pestañas en una sola página
- 29. Intercalación de matrices múltiples en una sola matriz
- 30. Aplicación de Android basada en una sola actividad, múltiples fragmentos
¡Gracias! Eso era exactamente lo que estaba buscando. Solo tuve que hacer un pequeño cambio en el bucle del método Pull: 'ImportFromPPT SrcDir +" \ "+ SrcFile, 1, 2' ' SrcFile = Dir' – thunderboltz
ahhh correcto ... Olvidé actualizar el hilo. .. lo siento; como ve, hay un poco de abstracción aquí, si la próxima vez que necesita extraer las diapositivas 5-7 puede reutilizar lo mismo ;-) – MikeD
@thunderboltz Este cambio fue necesario para mí también, ¡gracias! –