Contents 호환성 문제의 정의와 증상 분류 즉시 조치 체크리스트(빠른 복구) 파일 형식별 특성과 선택 기준 버전 차이로 인한 기능 손실과 대체 전략 조직 환경 차이: 32/64비트, 추가기능, 보안 정책 CSV·텍스트 파일 호환성: 인코딩·구분 기호·서식 날짜·숫자 변형 방…
글 전체 보기- 공유 링크 만들기
- X
- 이메일
- 기타 앱
Contents 호환성 문제의 정의와 증상 분류 즉시 조치 체크리스트(빠른 복구) 파일 형식별 특성과 선택 기준 버전 차이로 인한 기능 손실과 대체 전략 조직 환경 차이: 32/64비트, 추가기능, 보안 정책 CSV·텍스트 파일 호환성: 인코딩·구분 기호·서식 날짜·숫자 변형 방…
글 전체 보기이 글의 목적은 엑셀에서 “파일이 손상되었지만 일부 데이터를 복구했습니다” 경고가 표시될 때 원인 식별부터 안전한 데이터 복구, 재발 방지 설정까지 현장에서 즉시 적용 가능한 절차를 체계적으로 제공하는 것이다.
이 메시지는 통합 문서의 내부 XML 구성 요소 중 일부가 손상되어 엑셀이 자동 복구를 시도했음을 의미한다. 자동 복구가 성공하더라도 서식, 차트, 피벗캐시, 도형, 연결 정보 등 비핵심 개체가 소실될 수 있다. 즉시 해야 할 조치는 다음과 같다.
엑셀 .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인데 매크로 개체 포함 등 | 파일 유형에 맞게 다른 이름으로 저장 |
.zip으로 변경한다.xl/styles.xml, xl/sharedStrings.xml, xl/worksheets/sheetN.xml 등을 XML 검증 도구로 확인한다.xl/drawings 폴더를 임시로 제외한 뒤 재압축하여 열어본다.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
정리 후 통합 문서를 새 이름으로 저장하고 재시작 후 다시 연다. 메시지가 사라지면 스타일 손상이 원인이었던 것이다.
잘못된 범위를 가리키는 이름이 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
시트별 XML이 깨진 경우가 많다. 다음 순서로 손상 부위를 좁힌다.
도형, 아이콘, 스마트아트, 스파크라인 등은 xl/drawings 및 연관 rels에 저장된다. 열 때 경고가 나거나 인쇄에서 깨지면 도형 폴더를 임시 제외한 복구본을 만들어 증상을 확인한다. 문제가 사라지면 도형을 새로 삽입한다.
피벗캐시는 손상시 새로 고침이 실패한다. 해결책은 다음과 같다.
.xlsm에서 vbaProject.bin 손상 의심 시 다음을 수행한다.
시트가 열리지 않거나 스크롤만 해도 다운되면, 손상본을 데이터 소스로 취급하여 데이터만 추출한다.
인터넷에서 받은 파일은 운영체제가 보안 플래그를 붙일 수 있다. 파일 속성에서 차단 해제 옵션이 있으면 체크하고 다시 연다.
자동화 환경에서 파일 분해·재압축을 반복할 수 있다. 다음은 예시이다.
:: 사본 생성 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 | 우선순위 | 조치 | 목표 | 성공 기준 |
|---|---|---|---|
| 1 | 열기 및 복구 | 빠른 가용성 회복 | 경고 제거 또는 최소화 |
| 2 | 읽기 전용 열기 후 데이터 이관 | 핵심 데이터 보존 | 주요 테이블 확보 |
| 3 | 이전 버전 회수 | 신뢰 가능한 베이스라인 확보 | 경고 없는 파일 |
| 4 | ZIP 분해·문제 XML 격리 | 원인 제거 | 특정 개체 제외 시 정상 |
| 5 | 스타일·이름·피벗·도형 재구성 | 구성 정상화 | 기능 정상 작동 |
사례 A: 열 때마다 경고 + 서식 초기화 → styles.xml 손상 의심. CleanStyles 실행 후 정상 저장으로 해결하였다.
사례 B: 특정 시트 클릭 시 다운 → 해당 시트의 도형 일괄 삭제로 안정화. drawings 폴더 제거 재압축 테스트로 원인 확정하였다.
사례 C: 피벗 새로 고침 실패 → pivotCache 제거 후 피벗 재작성으로 해결하였다.
사례 D: 정의된 이름 오류 반복 → RemoveInvalidNames 매크로로 정리하고 이름 규칙을 재수립하였다.
읽기 전용으로 열어 데이터만 새 통합 문서에 값 붙여넣기 한다. 이후 ZIP 분해로 문제 XML을 배제하여 개체를 단계적으로 복원한다.
복구 로그의 손상된 레코드 항목과 ZIP 분해 후 개체 폴더별 배제 테스트를 병행한다. drawings, styles, pivotCache, sharedStrings 순으로 제외 테스트하면 분류가 빠르다.
가능하다. .xlsx로 저장하며 VBA를 제거한 뒤 파워 쿼리·CSV·값 붙여넣기로 데이터만 이관한다.
그리기 rels가 복잡해지고 파일 크기와 참조 수가 증가한다. 손상 시 영향 범위가 넓어져 오류 발생 확률이 높아진다.
외부에서 붙여넣기 시 서식을 제거하고, 템플릿 기반으로 제한된 스타일만 사용한다. 정기적으로 CleanStyles를 실행한다.