해결
파일 형식오류 열기 안되는 문제
정상적으로 저장되었던 파일이 다시 열기하면 파일 형식이 잘못되었다고 열리지 않습니다.
- 파일의 특징
-. M365 버전 / 윈11 입니다.
-. 파워쿼리를 이용하여 웹의 내용을 가져오는 쿼리문이 들어 있습니다.
-. 저장한 PC가 아닌 다른 PC에서 열었을 경우가 더 빈번합니다.
2. 해결 제시 내용
-. 파일 확장자를 'XLSX'에서 'XLSM 또는 XLS, ZIP으로 압축후 열기'로 변경해 본다.
-. 파일 선택후 '열기/복구' 방법
-. 엑셀 옵션의 '보안센터' '신뢰할 수 있는 위치 추가'
-. 파워쿼리 '캐시 삭제'
어떤 경우에도 해결이 안되네요.
추가적인 보안 설정이나 프로그램을 사용하고 있지 않습니다.
빈번하게 발생하고 있어서 근본적인 원인과 해결책을 알고 싶어서 혹시 경험하신 분이 조언을 구합니다.
홍
정
예
당
댓글 4
혹시 회사에서 파수 DRM 을 쓰고 계신가요? 계열사에서 보내준 DRM 걸린 파일을 열면 말씀하신 오류가 왕왕 발생해서 애먹었던 적이 있습니다
@더블유에이 님 딱히 DRM 프로그램을 사용하지 않늣 것으로 압니다.
집에서 작성한 파일도 자리를 다른 장소로 옮겨서
ㅡ다른 PC(노트북)로 옮겨ㅡ 열었을 때도
같은 현상이 있습니다.
당면히 인터넷상 저장 매체가 아닌 동일한
외장하드에 저장했습니다.
@가을남자 님 아래 답변을 참고하니 인코딩 문제일 수도 있겠군요..
확인을 따로 해보셔야 할 것 같습니다.
안녕하세요~
올려주신 오류는
M365에서 웹 크롤링(Power Query) 데이터를 사용하는 파일을 저장한 뒤,
다른 PC에서 열 때 ‘파일 형식이 잘못되었다’고 뜨면서 열리지 않는 문제로 정리할 수 있을 듯 합니다.
결론부터 말씀드리면,
물론 다양한 견해들이 있고,
아래 답변은 기술적 오류가 있을 수 있기 때문에
참고만 해주세요.
전형적인 내부 XML 구조 손상으로
특히 Power Query로 웹 데이터를 Excel로 저장 과정에서 발생하는
sharedStrings.xml 이나 sheetN.xml 파손으로 보는 것이 가장 적절한 거 같습니다.
1. 왜 XML 구조가 깨질까요?
Excel의 .xlsx 파일은 사실 압축된 XML 묶음(zip)으로
[xlsx 구조]
https://www.loc.gov/preservation/digital/formats/fdd/fdd000398.shtml
[sharedStrings.xml이 깨진 보고]
https://learn.microsoft.com/en-us/answers/questions/4900833/xl-sharedstrings-xml-part-with-xml-error-%28strings%29
즉, 파일이 깨졌다는 것은
내부의 XML 중 하나가 잘못된 문자 또는 잘못된 구조로 저장되었다는 뜻입니다.
예를 들어 xlsx를 zip으로 바꾸고 압축을 풀면(아니면 바로 마우스 오른쪽 버튼 클릭 후 압축풀기) 다음 구조가 존재합니다.
여기에 들어 있는 파일들은 모두 텍스트(XML)입니다.
XML은 eXtensible Markup Language로
아주 간단히 말하면 "데이터에 꼬리표(tag)를 붙인 텍스트 구조"입니다.
Sheet1.xml
xmlns:xr3="http://schemas.microsoft.com/office/spreadsheetml/2016/revision3" xr:uid="{729C2D6F-829E-4581-950D-105953E4519D}"><sheetPr codeName="Sheet2"><tabColor theme="4" tint="0.79998168889431442"/></sheetPr><dimension ref="A2:T16"/><sheetViews><sheetView tabSelected="1" workbookViewId="0"><selection activeCell="I18" sqref="I18"/></sheetView></sheetViews><sheetFormatPr defaultRowHeight="16.5" x14ac:dyDescent="0.3"/><cols><col min="4" max="4" width="13" customWidth="1"/><col min="7" max="7" width="13.875" customWidth="1"/><col min="9" max="9" width="19.625" customWidth="1"/><col min="13" max="13" width="12" customWidth="1"/></cols><sheetData><row r="2" spans="1:20" s="17" customFormat="1" ht="40.5" x14ac:dyDescent="0.3"><c r="A2" s="28" t="s"><v>24</v></c><c r="B2" s="1" t="s"><v>0</v></c><c r="C2" s="2" t="s"><v>1</v></c><c r="D2" s="3" t="s"><v>2</v></c><c r="E2" s="4" t="s"><v>3</v></c><c r="F2" s="5" t="s"><v>4</v></c><c r="G2" s="6" t="s">가령,
회원정보 홍길동 30 으로 기록하면,
컴퓨터는 단순한 문자열로 인식하지만
회원정보.xml 로 다음과 같이 표시하면
<회원정보>
<이름>홍길동</이름>
<나이>30</나이>
</회원정보>
비로소 회원정보 데이터가 됩니다.
엑셀 시트도 XML로 저장되어 있으며,
시트 서식, 셀 위치, 값 등이 모두 태그로 기록됩니다.
2. 이때,
웹 페이지의 HTML을 Power Query로 가져오면
그 안에는 다음 같은 엑셀 XML이 허용하지 않는 문자가 섞여 있을 수 있습니다.
제어문자(ASCII 0~31)
null 문자
보이지 않는 HTML 특수 공백( , U+00A0)
잘못 인코딩된 UTF-8 → CP949 변환 실패 문자
이모지, 특수 기호
이런 것들은 메모리 상에서
Power Query 미리보기에서는 정상처럼 보이지만,
문제는
엑셀 "저장" 순간에 이 텍스트가 sheet1.xml이나 sharedStrings.xml에 그대로 들어간다는 점입니다.
그러면 XML 구조가 이렇게 될 수 있습니다.
한 글자만 깨져도 XML 파싱이 실패하여
xlsx 전체가 "형식 오류"가 발생할 수 있습니다.
3. 그럼 왜 "다른 PC에서 열 때" 더 자주 발생할까요?
웹에서 가져오는 데이터는 PC마다 좀 다릅니다.
인코딩 처리에 차이가 있고 (UTF-8 ↔ CP949)
HTML 파싱 결과 차이도 있고
Power Query 버전 차이도 있습니다.
인터넷 브라우저의 WebView 버전의 차이나
컬럼 구조가 PC마다 달라지기도 하고
Null/빈 값이 어떤 PC에서는 특수문자로 들어오기도 합니다.
이 때문에 PC A에서 저장한 Power Query 테이블이
PC B에서는 다른 구조나 다른 문자열로 재해석되면서 파일이 깨졌다고 뜰 수 있습니다.
4. 따라서 웹 데이터를 정제하는 M-code 단계가 반드시 추가되어야 합니다.
아래는 가장 기본적인 정제 코드인데,
// 모든 텍스트 열에서 정제 실행 정제된_테이블 = Table.TransformColumns( 이전단계, { {"제목열", each Text.Clean(Text.Trim(_)), type text}, {"내용열", each Text.Clean(Text.Trim(_)), type text} } )Text.Clean은
제어문자를 제거하고, XML 파괴 문자 제거에 필수적이고,
Text.Trim은
앞뒤 공백이나 유니코드 공백을 제거해 줍니다.
6. 또한
자동 새로고침(Refresh on open)을 끄거나
백그라운드 새로고침도 끄고
저장은 XLSX보다 XLSB가 훨씬 안전할 수 있습니다.
이해하시는데
좀 도움이 되셨으면 좋겠습니다~