MS Office 문서 타입 구별 방법

MS Office 문서 타입 구별 방법

Overview

MS Office 문서는 전 세계에서 가장 많이 사용되는 문서 포맷 파일이다. 일반적으로는 docx, xlsx, pptx 가 가장 많이 상용되나, 이외에도 docm,,xlsb , potx 와 같이 MS 문서 뷰어 프로그램으로 열 수 있는 다양한 문서 포맷이 존재한다.

평소에는 파일 이름에 확장자가 포함되어 있어 이러한 문서들을 열람하는데 문제가 없으나, 모종의 이유로 확장자를 지워버리면 문서의 확장자를 알기 매우 어렵다. 이뿐만 아니라, 문서 확장자를 정확하게 지정하지 않으면 뷰어 프로그램이 에러 메시지만 출력하며 문서를 열지 못 한다.

이 글에서는 MS Office 문서의 파일 이름과 무관하게 확장자를 구분할 수 있는 방법에 대해 설명한다.

Office Open XML(OOXML)은 Microsoft 에서 개발하고 추진한 XML 을 기반으로 한 파일 포맷이다. doc, xls,ppt 확장자와 달리 최근에 생성된 문서들은 대부분 OOXML 포맷을 가진다. 이러한 문서들은 문서를 구성하는 XML, 리소스 파일들을 하나의 ZIP 파일로 압축하고 문서 확장자의 이름을 부여한 것과 같다. 따라서 압축 해제 파일을 이용해 ZIP 파일을 압축 해제할 수 있다.

다음은 예제 docx 파일을 압축 해제한 결과 폴더를 보여준다. 파일에는 문서를 구성하는 다양한 파일들이 존재하지만, 우리가 주목할 파일은 [Content_Types].xml 파일이다.

압축 해제한 docx 파일 내부

[Content_Types].xml 파일은 문서를 구성하는 XML 파일의 경로와 콘텐츠 타입을 정의한다. 이 중 Override 요소이며, PartName 속성 값이 /word/document.xml 인 요소의 ContentType 속성 값이 문서의 포맷을 정의한다. 예를 들어 아래 테스트 문서는 위 조건을 만족하는 요소의 ContentType 속성 값이 application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml 인 것으로 보아 docx 파일인 것을 알 수 있다.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
<Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Default Extension="xml" ContentType="application/xml"/>
<Override PartName="/word/document.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"/>
<Override PartName="/word/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml"/>
<Override PartName="/word/settings.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml"/>
<Override PartName="/word/webSettings.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml"/>
<Override PartName="/word/fontTable.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml"/>
<Override PartName="/word/theme/theme1.xml" ContentType="application/vnd.openxmlformats-officedocument.theme+xml"/>
<Override PartName="/docProps/core.xml" ContentType="application/vnd.openxmlformats-package.core-properties+xml"/>
<Override PartName="/docProps/app.xml" ContentType="application/vnd.openxmlformats-officedocument.extended-properties+xml"/>
</Types>

위와 마찬가지 방법으로 문서를 압축 해제한 후, [Content_Types].xml 파일의 내용을 검증하여 문서 확장자를 알 수 있다.

다음 표는 ContentType 속성 값에 따른 문서 확장자를 보여준다.

확장자 PartName 속성 값 ContentType 속성 값
docx /word/document.xml application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml
dotx /word/document.xml application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml
docm /word/document.xml application/vnd.ms-word.document.macroEnabled.main+xml
dotm /word/document.xml application/vnd.ms-word.template.macroEnabledTemplate.main+xml
xlsx /xl/workbook.xml application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml
xltx /xl/workbook.xml application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml
xlsm /xl/workbook.xml application/vnd.ms-excel.sheet.macroEnabled.main+xml
xltm /xl/workbook.xml application/vnd.ms-excel.template.macroEnabled.main+xml
xlam /xl/workbook.xml application/vnd.ms-excel.addin.macroEnabled.main+xml
pptx /ppt/presentation.xml application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml
potx /ppt/presentation.xml application/vnd.openxmlformats-officedocument.presentationml.template.main+xml
ppsx /ppt/presentation.xml application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml
ppam /ppt/presentation.xml application/vnd.ms-powerpoint.addin.macroEnabled.main+xml
pptm /ppt/presentation.xml application/vnd.ms-powerpoint.presentation.macroEnabled.main+xml
potm /ppt/presentation.xml application/vnd.ms-powerpoint.template.macroEnabled.main+xml
ppsm /ppt/presentation.xml application/vnd.ms-powerpoint.slideshow.macroEnabled.main+xml
참고로 문서 확장자에 m 을 포함하는 문서는 매크로 실행이 가능한 문서이다. 이러한 문서들은 악성 매크로를 포함할 수도 있으니 문서 실행에 주의가 필요하다.

xlsb 확장자 파일만 특별하게 Default 요소의 Extension 속성 값이 bin 이며, ContentType 속성 값이 application/vnd.ms-excel.sheet.binary.macroEnabled.main 이다.

확장자 Extension 속성 값 ContentType 속성 값
xlsb bin application/vnd.ms-excel.sheet.binary.macroEnabled.main