2013-09-06 2 views
0

다른 사용자가 작성한이 스크립트가 있습니다윈도우를 보지 않고 어떻게 프로그래밍 방식으로 파워 포인트를 열 수 있습니까?

입력 파일을 열고 .pdf로 변환하여 출력 파일로 저장합니다.

그러나 PowerPoint도 열리고 실제 창이로드되는 것을 볼 수 있습니다.

이 프로세스는 서버에서 실행될 예정이므로 사용자가 무언가를 변환하려고 할 때마다 GUI를로드하는 것이 불필요하게 리소스 집약적 일 것이라고 생각합니다.

GUI가 팝업되지 않고 프로그래밍 방식으로 PowerPoint를 여는 방법이 있습니까?


나는

objPPT.Visible = False

objPPT.Visible = True를 교체 시도했다 그러나 그것은 그 방법이 될 수 없음을 말해 오류가 발생합니다.

는 또한

objPPT.Presentations.Open inputFile,,,msoFalse

objPPT.Presentations.Open inputFile를 교체 시도했다하지만 그 말을 나에게 오류를 제공합니다

마이크로 소프트 파워 포인트 2013 : Application.ActivePresentation : 잘못된 요청 . 적극적인 발표가 없습니다.

오류는 Set objPresentation = objPPT.ActivePresentation 행에서 트리거됩니다.


주제에 대한 몇 가지 연구를하고에서, 나는 네 번째 매개 변수는 WithWindowOpen method

를 사용 에 의해 어떤 사람들은 성공을 것을 발견했다. 이론적으로 이것은 false로 설정된 경우 창없이 프리젠 테이션을 열어야합니다.

하지만 내가하는 일은 무엇이든 작동하지 않는 것 같습니다.

WithWindow:= false은 내게에서는 OpenXML에 대해 알게 구문 오류


' 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 

를 제공하고, 그로 찾고 있어요.

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

당신은 입력 파일을 열려면 그것을 이야기하고, 제목뿐만 아니라 읽기와 WithWindow를 떠나 :

+0

IIRC 표시되는 창없이 PowerPoint를 자동화 할 수 없습니다. –

+1

Ansgar, 맞지 않습니다. 보이지 않는 창을 사용하여 확실히 자동화 할 수는 있지만 특정 방법을 호출 할 수는 없습니다. –

답변

2
objPPT.Presentations.Open inputFile,,msoFalse 

IT는 PARMS은

objPPT.Presentations.Open inputFile,,,msoFalse 

다른 쉼표가 필요 parm을 기본값 (True)으로 설정하면 표시되는 창과 함께 열립니다.

눈에 보이는 창을 필요로하는 항목을 선택하는 코드를 작성할 수는 없지만이 작업을 수행하지 않으므로 가야합니다.

[첨부 된 수정 사항] Ansgar의 정확함 (이전의 저의 오해에 사과드립니다). 우리는 PPT를 보이지 않게 호출 할 수는 없지만, 창을 만들거나 프리젠 테이션을 열지 않으면 PPT가 나타나지 않습니다. 나는 당신이보고있는 정확한 문제를 해결하기 위해 VBS 스크립팅에 익숙하지 않지만 PPT 2013/Win8 및 PPT 2010/Win7에서이 VBA를 테스트 해 보았습니다. 새로운 슬라이드가 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 
+0

해봤을 때 Powerpoint에서 'Microsoft PowerPoint 2013 : Applicatio n.ActivePresentation : 잘못된 요청입니다. 활발한 프리젠 테이션이 없습니다. " – Houseman

+1

어떤 시점에서 오류 메시지가 표시됩니까? –

+0

Set objPresentation = objPPT.ActivePresentation 행에서 오류가 발생합니다. – Houseman