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에 관련 링크가 달려있으니 시간날때 한번 둘러봐야겠다.