엑셀 시트에 삽입된 그림을 추출하는 방법은 여러가지가 있습니다.
1. 각 그림 파일을 복사(Ctrl + C) 후 다른 곳에 붙여넣기(Ctrl + V) 하는 방법. (이 방법을 사용하면 해상도가 많이 떨어지게 된다.)
2. VBA(매크로)를 이용하여 시트에 삽입된 각 그림파일을 별도의 파일로 저장하는 방법. (매크로 초보자들은 당연히 사용에 어려움을 느낀다.)
Option Explicit
Sub SaveAllGraphics()
Dim FileName As String '파일 이름을 넣을 변수
Dim html_Name As String 'html 파일이름을 넣을 변수
Dim DirName As String '전체 폴더경로를 넣을 변수
Dim gFile As String '각 그림파일을 넣을 변수
Application.DisplayAlerts = False '경고 기능 (일시)정지
With ActiveWorkbook '(화면에 보이는)활성화된 파일에서
FileName = .FullName '현재파일의 전체이름을 변수에 넣음
html_Name = .Path & "\" & .Name & "graphics.htm"
'전체이름 + graphics.htm 을 변수에 넣음
DirName = Left(html_Name, Len(html_Name) - 4) & "_files"
'폴더 이름을 변수에 넣음
.SaveAs FileName:=html_Name, FileFormat:=xlHtml
'파일을 HTML파일 형식으로 다른 이름으로 저장
.Close '파일을 닫음
End With
Workbooks.Open FileName '파일을 열음
Kill html_Name 'HTML 파일 삭제
gFile = Dir(DirName & "\*.*") '폴더에 있는 파일을 변수에 넣음
Do While gFile <> "" '더이상 파일 없을때까지 무한 반복
If Right(gFile, 3) <> "png" Then Kill DirName & "\" & gFile
'폴더내의 확장자가 png 아닌 모든 파일을 삭제
gFile = Dir '다음 파일을 변수에 넣음
Loop
Shell "explorer.exe " & DirName, vbNormalFocus '탐색기 실행하여 생성된 파일 보여줌
End Sub
3. 엑셀 파일을 .htm 파일로 저장 하면 임시 폴더에 엑셀파일내의 모든 그림파일이 저장되므로 이를 가져오는 방법. (삽입된 그림파일의 확장자와 상관 없이 모든 그림파일을 .png 파일로 저장한다.)
4. 엑셀파일의 확장자를 .zip 으로 바꾸고 폴더내의 그림파일을 가져오는 방법.
.xlsx 확장자를 가진 엑셀파일은 실제로는 압축파일(.zip)이며, .xlsx 확장자를 .zip으로 바꾸어 압축 폴더내에 저장된 그림을 복사해 가져오는 방법입니다.
위의 방법은 엑셀파일에 저장된 그림을 그대로 가져오므로 해상도의 손실이 없습니다.
a. 파일의 이름변경(F2 키를 누르고)을 해서 확장자를 .xlsx에서 .zip 으로 수정합니다. 경고창이 나타나면 확인을 누릅니다.
b. 확장자가 .zip으로 변경된 파일의 압축을 풀면 xl 폴더 => media 폴더에 그림 파일들이 있습니다.
c. 각 파일을 열어보면 엑셀 파일에 삽입되어 있는 그림 파일임을 알 수 있습니다.(이 파일을 별도의 폴더에 복사하여 사용하시면 됩니다.).
(확장자를 .zip 에서 .xlsx 파일로 수정하면 당연히 일반적인 엑셀파일로 되돌아갑니다.)