파워포인트에 삽입된 차트가 연결로 삽입되었다가 원본엑셀파일이 사라져서 엑셀 데이터를 수정하지 못할 때
How to recover the excel data from a chart whose excel link is broken

 

참고: 지식인

일단엑셀의 혹시 원본 경로가 잘못되었는지부터 확인해보세요.

파일 > 정보에서 '파일연결편집'을 눌러보면 엑셀파일이 있어야할 경로가 보입니다.

파일은 있는데 경로가 바뀌었다면 '원본 변경'을 눌러서 바꿀 수 있습니다.

현재로서는 연결된 원본 XLSx 파일이 없기 때문에 엑셀데이터 원본을 그대로 되살리기 어렵습니다.

다만, 아래 VBA를 이용하면 파워포인트 차트에 남아있는 데이터를 이용해서 데이터 숫자는 복구해볼 수 있습니다.

더보기
Option Explicit

Sub RecoverData()
    Dim oSld As Slide
    Dim oShp As Shape
    
    Dim xlApp As Object ' New Excel.Application
    Set xlApp = CreateObject("Excel.Application")
    xlApp.Visible = True
    Dim xlBook As Object    'Excel.Workbook
    Set xlBook = xlApp.Workbooks.Add
    Dim xlSht As Object 'Excel.Worksheet
    Dim c%
    
    On Error Resume Next
    
    xlApp.ScreenUpdating = False
    For Each oSld In ActivePresentation.Slides
        For Each oShp In oSld.Shapes
            If oShp.Type = msoChart Then
                c = c + 1
                If c = 1 Then
                    Set xlSht = xlBook.Worksheets(1)
                Else
                    Set xlSht = xlBook.Worksheets.Add
                End If
                xlSht.Move After:=xlBook.Worksheets(xlBook.Worksheets.Count)
                recoverDataFromChart xlSht, oShp
                 
            End If
        Next oShp
         
    Next oSld
    
    xlApp.ScreenUpdating = True
    'Set xlApp = Nothing
End Sub


Function recoverDataFromChart(oxlSht As Object, shp As Shape)

    Dim sld As Slide
    Dim cht As Chart
    Dim srs As Series
    Dim i%, x%
 
    Set cht = shp.Chart
    oxlSht.Name = shp.Name
    'If cht.PlotBy = xlRows Then Debug.Print "xlRows"
    
    For i = 1 To cht.SeriesCollection.Count
    
        Set srs = cht.SeriesCollection(i)
        For x = 1 To UBound(srs.XValues)
            
            If i = 1 Then
                oxlSht.Cells(x, i) = srs.XValues(x)    'Format(srs.XValues(x), "yy-mm-dd")
                If shp.Parent.SlideIndex = 1 Then oxlSht.Cells(x, i).NumberFormat = "YYYY-MM"
                ElseIf shp.Parent.SlideIndex = 2 Then oxlSht.Cells(x, i).NumberFormat = "MM-DD"
            End If
            
            oxlSht.Cells(x, i + 1) = srs.Values(x)
            If shp.Parent.SlideIndex <> 3 Then oxlSht.Cells(x, i + 1).NumberFormat = "0.00%"
        
        Next x
        
    Next i
    
End Function

Alt-F11 누르고 모듈을 삽입한 다음 위 코드를 붙여넣고 실행하면

엑셀 파일을 하나 생성해서 모든 슬라이드의 차트의 데이터를 생성된 엑셀파일의 각 시트마다에 살려줍니다.

아래는 슬라이드 3의 차트 데이터를 엑셀 시트에 복구한 모습입니다.

자료의 형식은 사용자가 수정해줘야 합니다.

 

여기서는 데이터형식에 날짜와 숫자 등을 이 차트 형식에 맞도록 몇몇 셀등의 numberFormat 을 수정해주었습니다.

 

RecoverDataFromBrokenChart1.pptm
0.37MB