Tengo este script, hecha por otro usuario

Abre el archivo de entrada, lo convierte en un .pdf y la guarda como archivo de salida.

Sin embargo, PowerPoint también se abre, y puedo ver la ventana de carga.

Este proceso va a ser que se ejecuta en un servidor, así que me imagino que carga la interfaz gráfica de usuario cada vez que un usuario quiere convertir algo va a ser innecesariamente recursos.

Es hay alguna forma de abrir mediante programación de PowerPoint sin la interfaz gráfica de usuario, haciendo estallar para arriba?


He tratado de sustituir

objPPT.Visible = True con

objPPT.Visible = False

Pero que tira un error me dice que no puede ser de esa manera.

También he tratado de sustituir

objPPT.Presentations.Open inputFilecon

objPPT.Presentations.Open inputFile,,,msoFalse

Pero que me da un error que dice:

Microsoft PowerPoint 2013: Aplicación.ActivePresentation : No Válido
solicitud. No hay ninguna presentación activa.

El error se desencadena a partir de la Set objPresentation = objPPT.ActivePresentation línea.


De hacer un poco de investigación sobre el tema, encontré que algunas personas tienen éxito por
el uso de la Método abierto

El cuarto parámetro es WithWindow. En teoría, esto debería abrir la presentación sin una ventana si se establece a false.

Pero lo que tengo que hacer para que no parece funcionar.

WithWindow:= false me da un error de sintaxis


' Courtesy BillP3rd of superuser.com
Option Explicit
Sub WriteLine ( strLine )
WScript.Stdout.WriteLine strLine
End Sub
' http://msdn.microsoft.com/en-us/library/office/aa432714(v=office.12).aspx
Const msoFalse = 0   ' False.
Const msoTrue = -1   ' True.
' http://msdn.microsoft.com/en-us/library/office/bb265636(v=office.12).aspx
Const ppFixedFormatIntentScreen = 1 ' Intent is to view exported file on screen.
Const ppFixedFormatIntentPrint = 2  ' Intent is to print exported file.
' http://msdn.microsoft.com/en-us/library/office/ff746754.aspx
Const ppFixedFormatTypeXPS = 1  ' XPS format
Const ppFixedFormatTypePDF = 2  ' PDF format
' http://msdn.microsoft.com/en-us/library/office/ff744564.aspx
Const ppPrintHandoutVerticalFirst = 1   ' Slides are ordered vertically, with the first slide in the upper-left corner and the second slide below it.
Const ppPrintHandoutHorizontalFirst = 2 ' Slides are ordered horizontally, with the first slide in the upper-left corner and the second slide to the right of it.
' http://msdn.microsoft.com/en-us/library/office/ff744185.aspx
Const ppPrintOutputSlides = 1               ' Slides
Const ppPrintOutputTwoSlideHandouts = 2     ' Two Slide Handouts
Const ppPrintOutputThreeSlideHandouts = 3   ' Three Slide Handouts
Const ppPrintOutputSixSlideHandouts = 4     ' Six Slide Handouts
Const ppPrintOutputNotesPages = 5           ' Notes Pages
Const ppPrintOutputOutline = 6              ' Outline
Const ppPrintOutputBuildSlides = 7          ' Build Slides
Const ppPrintOutputFourSlideHandouts = 8    ' Four Slide Handouts
Const ppPrintOutputNineSlideHandouts = 9    ' Nine Slide Handouts
Const ppPrintOutputOneSlideHandouts = 10    ' Single Slide Handouts
' http://msdn.microsoft.com/en-us/library/office/ff745585.aspx
Const ppPrintAll = 1            ' Print all slides in the presentation.
Const ppPrintSelection = 2      ' Print a selection of slides.
Const ppPrintCurrent = 3        ' Print the current slide from the presentation.
Const ppPrintSlideRange = 4     ' Print a range of slides.
Const ppPrintNamedSlideShow = 5 ' Print a named slideshow.
' http://msdn.microsoft.com/en-us/library/office/ff744228.aspx
Const ppShowAll = 1             ' Show all.
Const ppShowNamedSlideShow = 3  ' Show named slideshow.
Const ppShowSlideRange = 2      ' Show slide range.
'
' This is the actual script
'
Dim inputFile
Dim outputFile
Dim objPPT
Dim objPresentation
Dim objPrintOptions
Dim objFso
If WScript.Arguments.Count <> 2 Then
WriteLine "You need to specify input and output files."
WScript.Quit
End If
inputFile = WScript.Arguments(0)
outputFile = WScript.Arguments(1)
Set objFso = CreateObject("Scripting.FileSystemObject")
If Not objFso.FileExists( inputFile ) Then
WriteLine "Unable to find your input file " & inputFile
WScript.Quit
End If
If objFso.FileExists( outputFile ) Then
'WriteLine "Your output file (' & outputFile & ') already exists!"
'WScript.Quit
End If
WriteLine "Input File:  " & inputFile
WriteLine "Output File: " & outputFile
Set objPPT = CreateObject( "PowerPoint.Application" )
objPPT.Visible = True
objPPT.Presentations.Open inputFile
Set objPresentation = objPPT.ActivePresentation
Set objPrintOptions = objPresentation.PrintOptions
objPrintOptions.Ranges.Add 1,objPresentation.Slides.Count
objPrintOptions.RangeType = ppShowAll
' Reference for this at http://msdn.microsoft.com/en-us/library/office/ff746080.aspx
objPresentation.ExportAsFixedFormat outputFile, ppFixedFormatTypePDF, ppFixedFormatIntentScreen, msoTrue, ppPrintHandoutHorizontalFirst, ppPrintOutputSlides, msoFalse, objPrintOptions.Ranges(1), ppPrintAll, "Slideshow Name", False, False, False, False, False
objPresentation.Close
ObjPPT.Quit

Me enteré de OpenXML, y yo estoy buscando en los que.

  • CREO que no se puede automatizar de PowerPoint sin que aparezca una ventana.
  • Ansgar, eso no es correcto. Definitivamente, usted puede automatizar w/o visible de la ventana, pero usted no puede llamar a ciertos métodos de si.
InformationsquelleAutor Houseman | 2013-09-06

1 Comentario

  1. 2
    objPPT.Presentations.Open inputFile,,msoFalse

    Necesita otra coma

    objPPT.Presentations.Open inputFile,,,msoFalse

    Los parámetros son:

    Presentations.Open "filename", boolReadOnly, boolOpenUntitled, boolWithWindow

    Estás diciendo que para abrir el archivo de entrada, sólo de lectura, no sin título y dejando el WithWindow parm a su valor por defecto (Verdadero), que se abre CON una ventana visible.

    Tener en cuenta que no se puede escribir cualquier código que selecciona nada (que requiere una ventana visible), pero ya que usted no está haciendo esto, usted debe ser bueno para ir.

    [ANEXA EDICIONES]
    Ansgar correcto (pido disculpas por mi anterior equivocado de comentario). No está permitido invocar PPT invisible, PERO si crear o abrir una presentación windowlessly, PPT no aparece nunca. No estoy lo suficientemente familiarizado con VBS de secuencias de comandos para determinar con precisión el problema que estamos viendo, pero tienen la prueba de este VBA en 2013 PPT/Win8 y PPT 2010/Win7. Nuevas diapositivas se añaden a la presentación de w/o PPT nunca aparecen.

    ' Add a Slide to a Microsoft PowerPoint Presentation
    Const ppLayoutText = 2
    Dim objPPT As Object
    Dim objPresentation As Object
    Dim objSlide As Object
    Set objPPT = CreateObject("PowerPoint.Application")
    Set objPresentation = objPPT.presentations.Open("c:\temp\something.pptx", , , msoFalse)
    Set objSlide = objPresentation.Slides.Add(1, ppLayoutText)
    objPresentation.Save
    objPPT.Quit
    • Cuando lo probé, me sale un error de Powerpoint que dice Microsoft PowerPoint 2013: Applicatio n.ActivePresentation : Invalid request. There is no active presentation.
    • ¿En qué momento se muestre ese mensaje de error?
    • El error se desencadena a partir del Conjunto objPresentation = objPPT.ActivePresentation line.

Dejar respuesta

Please enter your comment!
Please enter your name here