엑셀장표로 ProcessFlowDiagram PPT 만들기

1. 개요 : SI 프로젝트 과정에서 업무 분석을 위해 엑셀로 만든 장표를 사용하고, 다시 이 장표의 내용을 활용해 PFD를 그려야는데 주로 PPT파일을 이용합니다. 개발해야 하는 과제 수가 많은 경우에는 이 작업에 많은 시간을 소요하게 되는데요, ChatGPT를 사용해서 이 작업을 처리하는 코드를 구현해 사용하면 유용할 것 같아서 시도를 해 봤습니다.

2. 접근방식 :
초기> 구문 서술 방식으로 프롬프트를 주고 코드를 만들어 달라고 하니 부분적으로 오류가 발생해서 디버깅 하는데 신경을 쓰게 되었습니다.
개선> 프롬프트를 알고리즘 형태로 정리해서 주문하니 좀 더 나은 코드를 만들어 주긴 했지만, 길지 않은 프롬프트 임에도 코드를 완성하지 못해 중단되기를 반복하였고, 프롬프트를 조금씩 달리하여 주문하여 일단 원하는 최소한의 결과물을 만들어내는 코드를 얻게 됐습니다.

3. 프롬프트 : 최종 적용해 결과물을 얻은 프롬프트는 다음과 같습니다.

지금부터 고급 vba 프로그래머로서 답변을 해 줘.
엑셀 파일에 있는 데이터를 이용해서 파워포인트 파일에 프로세스 플로우 다이어 그램을 만들어 주는 vba 코드를 만들고 싶어.
1. 소스 엑셀 파일의 경로와 파일명은 ''이야.
2. 타켓 파워포인트 파일의 경로와 파일명은 ''이야.
3. 소스 엑셀 파일에는 여러 개의 시트가 있고, 시트의 개수는 유동적이야.
4. 소스 엑셀 파일의 각 시트에는 E9셀 부터 E24셀 까지 '단위 프로세스 명칭' 값이 들어있어.
5. 파워포인트 파일에 새로운 빈 페이지를 생성해
6. 첫번째의 시트에서 E9셀 부터 E24셀 까지 순서대로 값을 읽어
7. 생성한 파워포인트 페이지에 하나의 시트에서 읽어들인 셀 값들을 이용해서 순서대로 사각형을 생성하고 각각의 셀 값을 생성한 사각형의 텍스트로 지정해
8. 앞에서 만든 사각형과 다음에 만든 사각형은 화살표가 있는 직선으로 연결해.
9. E24셀의 값을 읽어들어서 마지막 사각형을 만들 때까지 6에서 8까지 반복해
10. 모든 시트의 값으로 파워포인트 파일에 플로우차트 페이지를 모두 만들때까지 반복해
11. 파워포인트 파일을 저장하고 종료해
위와 같이 수행하는 vba 코드를 만들어줘. 

4. 프롬프트

Sub CreateProcessFlowDiagram()

    ' Define source and target file paths
    Dim sourceFilePath As String
    Dim targetFilePath As String
    sourceFilePath = "엑셀파일.xlsx"
    targetFilePath = "PPT파일.pptx"
   
    ' Create a new PowerPoint presentation
    Dim pptApp As PowerPoint.Application
    Dim pptPres As PowerPoint.Presentation
    Set pptApp = New PowerPoint.Application
    Set pptPres = pptApp.Presentations.Add
   
    ' Loop through each sheet in the source Excel file
    Dim sourceWB As Workbook
    Set sourceWB = Workbooks.Open(sourceFilePath)
    Dim sheetCount As Integer
    sheetCount = sourceWB.Sheets.Count
    Dim i As Integer
    For i = 1 To sheetCount
       
        ' Create a new slide in the PowerPoint presentation
        Dim pptSlide As PowerPoint.Slide
        Set pptSlide = pptPres.Slides.Add(pptPres.Slides.Count + 1, ppLayoutBlank)
       
        ' Read the process names from the current sheet
        Dim processNames() As Variant
        processNames = sourceWB.Sheets(i).Range("E9:E24").Value
       
        ' Create rectangles for each process name
        Dim rectLeft As Integer
        rectLeft = 100
        Dim rectTop As Integer
        rectTop = 100
        Dim rectWidth As Integer
        rectWidth = 100
        Dim rectHeight As Integer
        rectHeight = 50
        Dim j As Integer
        For j = 1 To UBound(processNames)
            Dim pptShape As PowerPoint.Shape
            Set pptShape = pptSlide.Shapes.AddShape(msoShapeRectangle, rectLeft, rectTop, rectWidth, rectHeight)
            pptShape.TextFrame.TextRange.Text = processNames(j, 1)
            rectLeft = rectLeft + rectWidth + 100
        Next j
       
        ' Connect the rectangles with arrows
        Dim k As Integer
        For k = 1 To UBound(processNames) - 1
            Dim startShape As PowerPoint.Shape
            Set startShape = pptSlide.Shapes(k)
            Dim endShape As PowerPoint.Shape
            Set endShape = pptSlide.Shapes(k + 1)
            Dim pptLine As PowerPoint.Shape
            Set pptLine = pptSlide.Shapes.AddLine(startShape.Left + startShape.Width, startShape.Top + startShape.Height / 2, endShape.Left, endShape.Top + endShape.Height / 2)
            pptLine.Line.EndArrowheadStyle = msoArrowheadOpen
        Next k
        
    Next i
    
    ' Save and close the PowerPoint presentation
    pptPres.SaveAs targetFilePath
    pptPres.Close
    pptApp.Quit
    
    ' Clean up
    Set pptLine = Nothing
    Set endShape = Nothing
    Set startShape = Nothing
    Set pptShape = Nothing
    Set pptSlide = Nothing
    Set pptPres = Nothing
    Set pptApp = Nothing
    sourceWB.Close
    Set sourceWB = Nothing

End Sub

5. 결과물 : 위 코드를 실행시켰을 때, 주어진 엑셀 파일에 있는 여러 개의 시트에서 특정 셀들에 들어 있는 값(프로세스명칭)들을 읽어서 파워포인트 페이지 위에 시트의 개수(과제수) 만큼의 ProcessFlowDiagram을 생성해 주는 것을 확인할 수 있었습니다.

6. 평가 및 개선
이번 프롬프트에서는 엑셀의 셀값을 이용해 파워포인트에 다이어그램을 제대로 생성해 주는 기본적인 코드를 만드는 것으로만 요구를 했기 때문에 그 결과물을 그대로 장표로 활용할 수는 없지만 이렇게 만들어진 기본적인 파워포인트 파일 만으로도 어느 정도 시간 절약이 가능할 것 같고요, 추후에 코드를 좀 더 세밀하게 다듬도록 프롬프트를 개선한다면 어느 정도 장표로 활용할 수 있는 형태까지 결과물을 만들 수 있을 것으로 기대가 됩니다.

추후에 프롬프트를 좀 더 다듬어서 좀 더 완성된 장표를 만들 수 있게 되면 추가로 업데이트해 올리겠습니다.

* 다음 단계 진행 중인데 제대로 되지 않아서 고전 중이네요 ㅠㅠ 혹시 도움을 주실 분이 있을 지 몰라서 여기에 남겨봅니다.

위에서 진행한 작업은 PFD를 그려주기 위해 새로운 페이지(빈 페이지 레이아웃)를 추가하여 거기에 박스와 화살표를 그리게 한 것이었는데요,

이번에는 좀 더 세부적인 내용들을 포맷에 맞게 작성해 주기 위해서, 장표 형태로 만든 레이아웃을 마스터에 만들어 두고, 새로운 페이지를 만들 때 해당 레이아웃을 만들고, 엑셀의 특정 셀에 있는 값들을 해당 레이아웃에 만들어 놓은 객체들에게 지정해 줌으로써 엑셀의 세부 내용들이 파포에 만들어 놓은 장표에 표시되도록 하려는 것인데요..

이 과정에서 새로운 레이아웃을 추가된 페이지에 적용하는 부분에서 잘 안되네요...ㅠㅠ
혹시 이와 관련해서 팁을 주실 분이 계실까요?
3
2개의 답글

👉 이 게시글도 읽어보세요