[001] WinForms C# 찬양 가사 텍스트를 파워포인트로 만들기

2023. 1. 21. 23:35프로그램개발/WinForms C#

반응형

안녕하세요~ totally 개발자입니다.

 

오늘은 WinForms C#으로 가사 텍스트를 파워포인트 슬라이드로 나눠서 변환해주는 프로그램을 만들어보려고 합니다. 제가 개인적으로 교회 방송실을 하면서 찬양 가사를 급하게 파워포인트로 출력해야 할 때 제작의 필요성을 많이 느꼈습니다. 그 이유는 타이핑이나 가사를 2-3줄씩 각각 복사해서 슬라이드에 있는 텍스트 상자에 붙여 넣는 것이 의외로 시간이 걸리기 때문입니다. 그래서 직접 개발을 해보기로 결심하고 그 과정을 아래에 남깁니다.

 

Step 1: Visual Studio 설치 (비주얼 스튜디오를 설치하시고 Windows Forms C#를 사용할 수 있도록 선택 옵션에서 설치하시면 됩니다.

 

Step 2: 아래에서 Windows Forms 앱을 선택하시면 되며 .NET 6.0으로 저는 선택하고 넘어갔습니다.

 

Step 3: 오른쪽 솔루션 탐색기의 WinFormPowerPoint에 마우스 우클릭합니다.

 

Step 4: 추가(D) -> COM 참조(C)를 누릅니다.

 

Step 5: 저는 Microsoft Office Excel, Graph, Word도 선택했는데 아래 2개 정도만 체크해주고 아래 확인 버튼 눌러주시면 됩니다.

 

Step 6: 보기 -> 도구 상자(X)를 눌러줍니다.

 

Step 7: 그러면 왼쪽에 도구 상자가 생기며 이 도구 상자에서 드래그 앤 드롭으로 필요한 것을 추가하면 됩니다.

Step 8: 저는 아래처럼 구성했습니다. Label, RichTextBox, Button입니다.

 

 

Step 9: 레이아웃에 마우스 우클릭 하시면 속성(R)이 나오는데, 속성을 눌러줍니다. 이 속성에서 크기, 디자인, 이름 등을 모두 수정할 수 있습니다.

 

 

우측 하단에서 수정 가능합니다.

 

Step 10: 위에 있는 '생성하기' 버튼을 더블 클릭해서 C# Click 메소드를 만들어주고 C# 코드 부분으로 가줍니다.

그러면 위와 같이 private void button1_Click(object sender, EventArgs e) 코드가 생성된 것을 확인할 수 있습니다. 이제 코드를 작성해보도록 하겠습니다. 먼저 맨 위에 다음 3줄을 추가해주었습니다.

 

 

다음으로 가사 변수를 선언했습니다. 노래 찬양 가사를 받아올 것이기 때문에 Form으로부터 Text를 받아옵니다. 저는 Step 9에서 설명드린 속성에서 RichBoxText의 Name을 lyricText로 변경하였습니다.

 

그리고 파워포인트 인스턴스를 생성 및 추가해주면 됩니다.

 

슬라이드 변수 선언해주고 슬라이드 배경을 검정색으로 해줄 수 있도록 변수로 지정합니다.

 

빈 줄을 분리할 수 있게 아래처럼 Split하여 배열로 구성했습니다. 예를 들어 아래와 같이 담기게 됩니다.

"안녕하세요

반갑습니다

 

지금은 예제를 보여

드리고 있습니다"

 

이렇게 있을 때 ["안녕하세요\n반갑습니다", "지금은 예제를 보여\n드리고 있습니다"] 이런 방식으로 2개로 분리되게 됩니다.

 

이 배열을 근거로 하여 슬라이드를 추가해가며 가사를 분리하여 만들어줄 수 있습니다. 아래 주석을 참고하시면 됩니다.

 

이제 실행해서 결과를 보여드리도록 하겠습니다. 아래처럼 "은혜"라는 찬양의 가사 일부를 복사해서 붙여넣고 '생성하기' 버튼을 눌러보았습니다.

 

 

아래처럼 파워포인트 슬라이드로 잘 생성되어 만들어진 것을 확인해보실 수 있습니다.

 

아래에 전체 소스 코드를 첨부하니 참고하시면 됩니다. 감사합니다.

 

[전체 소스 코드]

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

namespace WinFormPowerPoint
{
    public partial class Form1 : Form
    { 
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // 가사 변수 초기화
            string text = lyricText.Text;

            // 파워포인트 인스턴스 생성 및 추가
            PowerPoint.Application objApp = new PowerPoint.Application();
            PowerPoint._Presentation objPres = objApp.Presentations.Add(MsoTriState.msoTrue);
            objApp.Visible = MsoTriState.msoTrue;

            // 슬라이드 변수 선언
            PowerPoint.Slides objSlides = objPres.Slides;

            // 슬라이드 배경 검정색으로 변수 지정
            Color backgroundColor = Color.Black;

            // 빈 줄이 있을 때 text를 배열 element로 분리
            string[] textArr = text.Split(new[] { "\n\n" }, StringSplitOptions.RemoveEmptyEntries);

            for (int i = textArr.Length - 1; i >= 0; i--)
            {
                // 슬라이드 새로 추가
                PowerPoint._Slide objSlide = objSlides.Add(1, PpSlideLayout.ppLayoutBlank);

                // 슬라이드 배경 검정색으로 설정
                objSlide.FollowMasterBackground = MsoTriState.msoFalse;
                objSlide.Background.Fill.ForeColor.RGB = backgroundColor.ToArgb();

                // 슬라이드에 텍스트 상자 추가 및 스타일 지정
                objSlide.Shapes.AddTextbox(Microsoft.Office.Core.MsoTextOrientation.msoTextOrientationHorizontal, 10, 215, 940, 100);
                PowerPoint.TextRange objTextRng = objSlide.Shapes[1].TextFrame.TextRange;
                objTextRng.Text = textArr[i];
                objTextRng.Font.Size = 50;
                objTextRng.Font.Color.RGB = Color.White.ToArgb();
                objTextRng.Font.Bold = MsoTriState.msoTrue;
                objTextRng.ParagraphFormat.Alignment = PpParagraphAlignment.ppAlignCenter;
            }
        }
    }
}

 

 

반응형