현실감각 0% :: 'ppt 슬라이드 생성' 태그의 글 목록

컴퓨터 관련 2013. 4. 23. 13:02

c#에서 PPT 슬라이드 파일 생성하기



C#에서 PPT 슬라이드 파일 생성하기


MS워드, 엑셀 등등 Office 파일을 C#을 이용하여 자동으로 생성하는 프로그램을 몇번 만들었는데, 이번엔 PPT를 자동으로 생성하는 프로그램을 만들게 되었다...ㅠㅠ 아 귀찮~@#$!%&$

PPT 파일 자체가 MS에서 만든놈이고 C#.NET 또한 MS에서 만든놈이니 MSDN 같은데 가면 다 있겠지만 워낙 찾기가 귀찮고 쓰잘데 없는 내용이 많아서 구글신님께 부탁했더니 괜찮은걸 발견했다. 다만 2003 이전버전(*.ppt)은 지원을 안하고 2007 이상(*.pptx)에서만 되는듯..


출처는 요기

http://www.free-power-point-templates.com/articles/create-powerpoint-ppt-programmatically-using-c/ (영문)

자세히 둘러본건 아니지만 이것 뿐만 아니라 이런저런 유용한 슬라이드 템플릿하고 관련 소스가 많이 있는 것 같으니 PowerPoint에 관심있다면 한번 훑어 보는 것도 좋을 것이다.


소스는 요기!


using Microsoft.Office.Interop.PowerPoint;
using Microsoft.Office.Core;

namespace XXXXX
{
    class hdd_CreatePPT
    {
        public void CreatePowerPointSlides()
        {
            Application pptApplication = new Application(); // 어플리케이션 생성

            Slides slides;      // 슬라이드 묶음(파일)
            _Slide slide;       // 낱장 슬라이드
            TextRange objText;  // 텍스트 오브젝트

            // 프레젠테이션 파일 생성
            Presentation pptPresentation = pptApplication.Presentations.Add(MsoTriState.msoTrue);

            CustomLayout customLayout = pptPresentation.SlideMaster.CustomLayouts[PpSlideLayout.ppLayoutText];

            // 새 슬라이드 생성
            slides = pptPresentation.Slides;
            slide = slides.AddSlide(1, customLayout);

            // 타이틀 추가
            objText = slide.Shapes[1].TextFrame.TextRange;
            objText.Text = "제목입니당";
            objText.Font.Name = "Gulim";
            objText.Font.Size = 32;

            objText = slide.Shapes[2].TextFrame.TextRange;
            objText.Text = "1번째줄\n2번째줄\n3번째줄";

            slide.NotesPage.Shapes[2].TextFrame.TextRange.Text = "여기는 슬라이드 설명쓰는곳입니당~(원문출처: http://fppt.com)";

            pptPresentation.SaveAs(@"c:\ppttest.pptx", PpSaveAsFileType.ppSaveAsDefault, MsoTriState.msoTrue);
            //pptPresentation.Close();
            //pptApplication.Quit();
        }
    }
}





퍼온 소스이지만 그냥 카피 앤 페이스트 하기 미안해서 출력문만이라도 살짝 바꿔보았다.

사용하는법을 간단하게 설명하자면.. 우선 Microsoft.Office.Interop.PowerPoint.dll하고 Microsoft.Office.Interop.Word.dll 파일을 참조한다. Microsoft.Office.Interop.PowerPoint.dll은 이해가 되는데 왜 Microsoft.Office.Interop.Word파일까지?? 라고 물을 수 있는데, 그 이유는 MsoTriState 이녀석을 사용하기 위해서는 Microsoft.Office.Core를 참조해야 하고 해당 네임스페이스가 Microsoft.Office.Interop.Word.dll에 포함되어 있기 때문이다.

그리고 밑에 나오는 소스들... 소스 자체는 상당히 간단하다. Slides는 슬라이드 파일을 의미하고 Slide는 각 페이지를 의미하는것 같다. 그리고 TextRange는 글상자(?) 뭐였지.. 아무튼 글을 쓰기 위해 설정하는 그 점선의 사각형을 의미하는듯 하다. Shapes[1], [2]를 보건데 글상자가 만들어진 순서 등에 따라 배열 형식으로 구성되어 있음을 유추할 수 있다. 다만 글상자의 각 번호를 알기 위해서는 직접 뿌려보는 작업을 한번 해봐야 할듯 싶다.

가져다 쓰는것들이 다 그렇듯이 일단 오브젝트를 선언하고 TextRange에 글 입력하고 폰트 설정하는 것이 끝..;;;

사진 넣는법이나 TextRange의 위치를 변경하는 소스도 있었으면 더 좋았을텐데 아쉽다. 뭐 아래 Related posts에 관련 링크가 달려있으니 시간날때 한번 둘러봐야겠다.