2

別のユーザーが作成したこのスクリプトがあります

入力ファイルを開き、.pdf に変換して、出力ファイルとして保存します。

ただし、PowerPoint も開き、実際のウィンドウが読み込まれます。

このプロセスはサーバー上で実行されるため、ユーザーが何かを変換するたびに GUI をロードすると、不必要にリソースを集中的に使用することになると思います。

GUI がポップアップせずにプログラムで PowerPoint を開く方法はありますか?


交換してみました

objPPT.Visible = True

objPPT.Visible = False

しかし、それはそのようにはできないというエラーをスローします。

私も交換してみました

objPPT.Presentations.Open inputFile

objPPT.Presentations.Open inputFile,,,msoFalse

しかし、それは私に次のようなエラーを与えます:

Microsoft PowerPoint 2013: Application.ActivePresentation: 無効な要求です。アクティブなプレゼンテーションはありません。

エラーは Set objPresentation = objPPT.ActivePresentation行からトリガーされます。


このテーマについていくつかの調査を行ったところ、Open メソッドを使用して成功した人がいることがわかりました。

4 番目のパラメータはWithWindow. 理論的には、これを false に設定すると、ウィンドウなしでプレゼンテーションが開きます。

しかし、私が何をしてもうまくいかないようです。

WithWindow:= false構文エラーが表示される


' 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

私は OpenXML について知り、それについて調べています。

4

2 に答える 2

5
objPPT.Presentations.Open inputFile,,msoFalse

別のコンマが必要です

objPPT.Presentations.Open inputFile,,,msoFalse

パラメーターは次のとおりです。

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

入力ファイルを無題ではなく読み取り専用で開くように指示し、WithWindow パラメーターをデフォルト値 (True) のままにして、WITH 表示ウィンドウで開きます。

何かを選択する (可視ウィンドウを必要とする) コードを書くことはできないことに注意してください。

[追加編集] Ansgar の正しい (私の以前の誤ったコメントをお詫びします)。PPT を非表示で呼び出すことは許可されていませんが、プレゼンテーションをウィンドウなしで作成または開いた場合、PPT は表示されません。私はあなたが見ている問題を正確に解決するのに十分な VBS スクリプトに精通していませんが、この VBA を PPT 2013/Win8 および PPT 2010/Win7 でテストしました。PPT が表示されることなく、新しいスライドがプレゼンテーションに追加されます。

' 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
于 2013-09-08T18:22:44.460 に答える