엑셀 “파일이 손상되었지만 일부 데이터를 복구했습니다” 오류 완벽 해결 가이드

이 글의 목적은 엑셀에서 “파일이 손상되었지만 일부 데이터를 복구했습니다” 경고가 표시될 때 원인 식별부터 안전한 데이터 복구, 재발 방지 설정까지 현장에서 즉시 적용 가능한 절차를 체계적으로 제공하는 것이다.

1. 오류 메시지의 의미와 즉시 대응

이 메시지는 통합 문서의 내부 XML 구성 요소 중 일부가 손상되어 엑셀이 자동 복구를 시도했음을 의미한다. 자동 복구가 성공하더라도 서식, 차트, 피벗캐시, 도형, 연결 정보 등 비핵심 개체가 소실될 수 있다. 즉시 해야 할 조치는 다음과 같다.

  1. 손상 파일을 읽기 전용으로 열기하여 2차 손상을 방지한다.
  2. 다른 이름으로 저장을 수행해 현재 상태를 보존한다.
  3. 가능하면 클라우드·NAS·로컬의 이전 버전 또는 자동 저장본을 확인한다.
  4. 복구 로그를 확인한다. 대개 “손상된 레코드” 항목에 어느 구성 요소가 문제인지 단서가 담긴다.
주의 : 복구 후 즉시 동일 파일을 덮어쓰지 않는다. 원본, 복구본, 분석본을 분리 보관하여 역추적 가능성을 확보한다.

2. 대표 원인별 진단 로드맵

엑셀 .xlsx·.xlsm·.xltx 파일은 ZIP 컨테이너 내부의 XML 묶음으로 구성된다. 특정 XML 조각이 깨지면 본 경고가 발생한다. 아래 표는 빈도가 높은 원인과 관찰 증상, 1차 조치안을 정리한 것이다.

원인 카테고리 주요 파일(경로) 증상 1차 조치
스타일 손상 xl/styles.xml 열림 시 서식 초기화, 특정 셀 선택 시 다운 Clean Styles 매크로 실행 또는 styles.xml 제거 후 재생성
공유 문자열 손상 xl/sharedStrings.xml 텍스트가 ####로 보임, 특정 시트 표시 불가 문제 문자열 제거 및 재저장, 또는 파일 분해·복원
시트 XML 손상 xl/worksheets/sheetN.xml 특정 시트만 열면 즉시 오류 해당 시트 XML 검증·수정, 시트 분리 저장
도형/그리기 개체 손상 xl/drawings/*, xl/drawings/_rels/* 도형·아이콘 누락, 인쇄 미리보기 오류 문제 drawing 삭제 후 재삽입
피벗캐시 손상 xl/pivotCache/* 피벗 새로 고침 실패, 열림 경고 반복 피벗테이블 제거 후 원본에서 재작성
정의된 이름 손상 workbook.xml 내 definedNames #REF! 참조, 열림 시 경고 잘못된 이름 일괄 정리 스크립트 실행
VBA 프로젝트 손상 vbaProject.bin 매크로 서명 오류, 저장 시 충돌 VBA 내보내기·새 통합 문서로 가져오기
잘못된 확장자 컨테이너-내용 불일치 .xlsx인데 매크로 개체 포함 등 파일 유형에 맞게 다른 이름으로 저장

3. 안전 복구 절차: 단계별 체크리스트

  1. 엑셀 자체 복구
    • 파일 → 열기 → 파일 선택 → 열기 옆 ▼ → 열기 및 복구복구부터 시도한다.
    • 실패 시 같은 경로에서 데이터 추출을 시도한다.
  2. 자동 저장본·임시본 검색
    • 문서 복구 창 또는 “저장되지 않은 통합 문서 복구” 메뉴를 확인한다.
    • OneDrive·SharePoint·NAS의 버전 기록에서 직전 정상본을 회수한다.
  3. 읽기 전용으로 열고 데이터 이관
    • 새 통합 문서로 값 붙여넣기를 하여 핵심 데이터부터 격리한다.
    • 문제 시트는 CSV로 1시트씩 내보낸 후 재결합한다.
  4. ZIP 분해 복구(고급)
    • 원본 사본의 확장자를 .zip으로 변경한다.
    • 압축을 풀고 xl/styles.xml, xl/sharedStrings.xml, xl/worksheets/sheetN.xml 등을 XML 검증 도구로 확인한다.
    • 명백한 깨짐(미닫힘 태그 누락, 제어문자 포함)이 보이면 해당 노드를 제거하거나 최소 유효 형태로 수정한다.
    • 도형 손상 추정 시 xl/drawings 폴더를 임시로 제외한 뒤 재압축하여 열어본다.
  5. 문제 개체 재구성
    • 피벗테이블은 원본 데이터에서 다시 만들고, 연결은 새로 정의한다.
    • 정의된 이름, 스타일, 서식은 필요 최소만 유지한다.
주의 : ZIP 분해 복구는 원본을 훼손할 수 있다. 반드시 복제본에서만 수행한다.

4. 스타일 손상(Clean Styles) 정리

styles.xml 손상 또는 중복 스타일 폭증은 대표적 원인이다. 아래 매크로는 비정상 스타일을 정리하고 기본 스타일을 재정렬하는 방법이다.

' 모듈에 삽입 후 실행 Option Explicit
Public Sub CleanStyles()
Dim st As Style, i As Long
On Error Resume Next
' 이름이 비정상인 사용자 지정 스타일 제거
For i = ActiveWorkbook.Styles.Count To 1 Step -1
Set st = ActiveWorkbook.Styles(i)
If Not st.BuiltIn Then
If Len(st.NameLocal) = 0 Or InStr(st.NameLocal, Chr(0)) > 0 Then
st.Delete
End If
End If
Next i
On Error GoTo 0
' 표준 스타일 재설정
On Error Resume Next
ActiveWorkbook.Styles("Normal").IncludeNumber = True
ActiveWorkbook.Styles("Normal").IncludeAlignment = True
ActiveWorkbook.Styles("Normal").IncludeFont = True
ActiveWorkbook.Styles("Normal").IncludeBorder = True
ActiveWorkbook.Styles("Normal").IncludePatterns = True
ActiveWorkbook.Styles("Normal").IncludeProtection = True
On Error GoTo 0
End Sub

정리 후 통합 문서를 새 이름으로 저장하고 재시작 후 다시 연다. 메시지가 사라지면 스타일 손상이 원인이었던 것이다.

5. 정의된 이름 손상 일괄 제거

잘못된 범위를 가리키는 이름이 workbook.xml의 definedNames를 망가뜨릴 수 있다. 아래 코드는 오류 이름을 찾아 제거한다.

Option Explicit
Public Sub RemoveInvalidNames()
Dim nm As Name, cnt As Long
Application.ScreenUpdating = False
For Each nm In ActiveWorkbook.Names
If IsError(Evaluate(nm.RefersTo)) Then
nm.Delete
cnt = cnt + 1
End If
Next nm
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
For Each nm In ws.Names
If IsError(Evaluate(nm.RefersTo)) Then
nm.Delete
cnt = cnt + 1
End If
Next nm
Next ws
Application.ScreenUpdating = True
MsgBox cnt & " invalid names removed."
End Sub

6. 시트 XML 손상 최소화 전략

시트별 XML이 깨진 경우가 많다. 다음 순서로 손상 부위를 좁힌다.

  1. 각 시트를 새 통합 문서로 Move or Copy하여 개별 저장한다.
  2. 문제가 재현되는 시트를 찾으면 해당 시트의 개체 선택 모드로 전환하여 모든 도형·컨트롤을 삭제하고 저장한다.
  3. 조건부 서식 규칙 관리자에서 중복·순환 규칙을 정리한다.
  4. 피벗테이블과 차트를 제거하고 데이터만 남겨 본다.

7. 도형·그리기 개체 손상 대응

도형, 아이콘, 스마트아트, 스파크라인 등은 xl/drawings 및 연관 rels에 저장된다. 열 때 경고가 나거나 인쇄에서 깨지면 도형 폴더를 임시 제외한 복구본을 만들어 증상을 확인한다. 문제가 사라지면 도형을 새로 삽입한다.

8. 피벗캐시·연결 손상 제거

피벗캐시는 손상시 새로 고침이 실패한다. 해결책은 다음과 같다.

  • 피벗테이블을 삭제하고 원본 범위에서 새 피벗을 만든다.
  • 외부 연결은 데이터 → 쿼리 및 연결에서 중복·끊어진 경로를 제거한다.

9. VBA 프로젝트 재구성

.xlsm에서 vbaProject.bin 손상 의심 시 다음을 수행한다.

  1. VBE에서 각 모듈·폼을 파일(.bas/.cls/.frm)로 내보낸다.
  2. 빈 .xlsm를 만들고 내보낸 파일을 다시 가져온다.
  3. 디지털 서명이 있었다면 재서명한다.

10. Power Query·CSV를 활용한 데이터 살리기

시트가 열리지 않거나 스크롤만 해도 다운되면, 손상본을 데이터 소스로 취급하여 데이터만 추출한다.

  1. 새 통합 문서에서 데이터 가져오기 → 통합 문서 → 손상본 선택.
  2. 파워 쿼리 미리보기에서 정상 테이블만 선택해 로드한다.
  3. 안 되면 각 시트를 CSV로 저장 후 재결합한다.
주의 : CSV는 서식, 수식, 피벗, 도형 등 메타데이터를 잃는다. 핵심은 데이터 살리기가 우선이다.

11. 파일 속성 “차단 해제” 확인

인터넷에서 받은 파일은 운영체제가 보안 플래그를 붙일 수 있다. 파일 속성에서 차단 해제 옵션이 있으면 체크하고 다시 연다.

12. 대용량·복잡도에 따른 예방 설정

  • 계산 옵션을 수동으로 전환하고 저장 전 F9로 재계산한다.
  • 무분별한 병합, 중첩 조건부 서식, 수만 개의 고유 스타일 생성 작업을 줄인다.
  • 이름 관리자를 주기적으로 정리한다.
  • 피벗은 데이터 모델을 활용하거나 캐시 재사용을 설계한다.
  • 대규모 도형은 SVG·이미지로 단순화한다.

13. 고급: 명령줄로 분해·재압축

자동화 환경에서 파일 분해·재압축을 반복할 수 있다. 다음은 예시이다.

:: 사본 생성 copy "손상본.xlsx" "분해용.zip" :: 압축 풀기 tar -xf "분해용.zip" -C "work" :: 문제 개체 폴더 임시 제거 예시 rmdir /s /q "work\xl\drawings" :: 재압축 tar -cf "복구본.zip" -C "work" . :: 확장자 변경 rename "복구본.zip" "복구본.xlsx" 

유닉스 계열 셸을 쓰는 경우 다음과 같이 수행한다.

# 사본 생성 cp damaged.xlsx unpack.zip # 분해 unzip -q unpack.zip -d work # 도형 제거 테스트 rm -rf work/xl/drawings # 재압축 cd work && zip -qr ../repack.zip . cd .. && mv repack.zip repaired.xlsx 

14. 오류 원인별 복구 우선순위 체크리스트

우선순위조치목표성공 기준
1열기 및 복구빠른 가용성 회복경고 제거 또는 최소화
2읽기 전용 열기 후 데이터 이관핵심 데이터 보존주요 테이블 확보
3이전 버전 회수신뢰 가능한 베이스라인 확보경고 없는 파일
4ZIP 분해·문제 XML 격리원인 제거특정 개체 제외 시 정상
5스타일·이름·피벗·도형 재구성구성 정상화기능 정상 작동

15. 재발 방지 모범 설정

  • 템플릿(.xltx/.xltm)을 통해 스타일·이름 기준선을 통일한다.
  • 통합 문서 저장 시 파일 형식과 내용 일치를 유지한다(.xlsx는 매크로 비포함, .xlsm은 포함).
  • 대용량 파일은 시트 분할, 파워 쿼리·데이터 모델 사용으로 구조화한다.
  • 정기적으로 문서 검사오류 검사를 수행한다.
  • 신뢰할 수 없는 추가 기능은 제거한다.

16. 현장 트러블슈팅 예시 시나리오

사례 A: 열 때마다 경고 + 서식 초기화 → styles.xml 손상 의심. CleanStyles 실행 후 정상 저장으로 해결하였다.

사례 B: 특정 시트 클릭 시 다운 → 해당 시트의 도형 일괄 삭제로 안정화. drawings 폴더 제거 재압축 테스트로 원인 확정하였다.

사례 C: 피벗 새로 고침 실패 → pivotCache 제거 후 피벗 재작성으로 해결하였다.

사례 D: 정의된 이름 오류 반복 → RemoveInvalidNames 매크로로 정리하고 이름 규칙을 재수립하였다.

17. 품질 보증을 위한 점검 항목

  • 파일 크기 급증 여부 체크(스타일·도형 폭증 신호)
  • 이름 관리자 오류 여부
  • 조건부 서식 중복·순환 규칙 제거
  • 연결 및 쿼리 경로 유효성
  • 피벗캐시 재생성
  • 도형·아이콘 최소화
  • 계산 모드·호환성 검사 결과 기록

FAQ

열기 및 복구가 실패하면 어떻게 하나?

읽기 전용으로 열어 데이터만 새 통합 문서에 값 붙여넣기 한다. 이후 ZIP 분해로 문제 XML을 배제하여 개체를 단계적으로 복원한다.

원인을 정확히 특정하려면?

복구 로그의 손상된 레코드 항목과 ZIP 분해 후 개체 폴더별 배제 테스트를 병행한다. drawings, styles, pivotCache, sharedStrings 순으로 제외 테스트하면 분류가 빠르다.

매크로가 원인이면 데이터만 살릴 수 있나?

가능하다. .xlsx로 저장하며 VBA를 제거한 뒤 파워 쿼리·CSV·값 붙여넣기로 데이터만 이관한다.

도형을 많이 쓰면 왜 취약해지나?

그리기 rels가 복잡해지고 파일 크기와 참조 수가 증가한다. 손상 시 영향 범위가 넓어져 오류 발생 확률이 높아진다.

스타일 폭증은 어떻게 방지하나?

외부에서 붙여넣기 시 서식을 제거하고, 템플릿 기반으로 제한된 스타일만 사용한다. 정기적으로 CleanStyles를 실행한다.