본문 바로가기
카테고리 없음

엑셀 xlsx 파일 xml 구조 분석

by 퍼포먼스마케팅코더 2024. 2. 5.
반응형

기본적으로 엑셀 내 xlsx 파일을 zip 파일로 만들어서 이를 압축 해제를 하면 다음과 같은 파일이 나온다. 

폴더 형식으로 _rels, docProps, xl 로 구성돼 있고, Content_Types 로 해서 xml 파일이 있다. 먼저 _rels 폴더에 있는 xml 파일부터 먼저 살펴보자. 

 

 

아래는 _rels 폴더에 있는 .rels 파일의 xml 문서이다. 먼저 아래의 내용을 보면, Relationships 의 요소로 하여 파일 내 모든 관계를 담고 있는 컨테이너 역할을 한다고 함. 이는 http://schemas.openxmlformats.org/package/2006/relationships 의 네임스페이르르 사용하여 정의된다고 함. 

 

Relationships 의 요소를 보면, Id, Type, Target 속성을 가지며, 관계 대상을 지정. Id="rId3" 는 docProps/app.xml 과의 관계를 설정하며, Type 속성은 이 관계가 문서의 확장 속성과 관련됨을 나타냄.

 

Id="rId2" 는 문서의 코어 메타데이터 파일인 'docProps/core.xml' 과의 관계를 정의하는데, 문서의 기본적인 메타데이터(작성자, 제목 등)와 관련된 파일임.

 

Id="rId1" 는 문서의 주요 Office 문서 파일(xl/workbook.xml)과의 관계를 정의합니다. 이 경우 Excel 워크북을 나타내며, 스프레드시트 데이터를 포함하고 있는 파일.

 

해당 구조는 문서의 메타데이터, 확장속성, 실제 문서 데이터가 어떻게 서로 연결돼 있는지를 정의함. 관계 파일을 통해, 문서를 구성하는 파일들이 어떻게 상호 작용하며, 문서가 어떻게 구성되어 있는지를 파악할 수 있음.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships
	xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
	<Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/>
	<Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/>
	<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/>
</Relationships>

 

 

아래는 docProps 폴더 내 app.xml 파일과 core.xml 파일 임. 

 

 

먼저 app.xml 파일을 먼저 뜯어본다면 아래와 같음. docProps/app.xml 파일은 기본적으로 메타 데이터를 설명하는 구조를 나타냄.  문서 속성 정의에 사용. 아래의 각 요소는 다음과 같다. 

 

Application 요소(element) 는 문서를 생성한 어플리케이션

DocSecurity 요소(element) 는 0이면 보안 설정이 안된거임.

ScaleCrop 요소(element) 는 이미지가 자르기를 위해 비율 조정이 되었는지의 여부임. false 로 되면 비율 조정, 자르기가 적용돼 있지 않음을 의미.

 

HeadingPairs, TitlesOfParts 요소는 문서의 구조를 설명함. HeadingPairs 는 문서의 주요 구성 요소와 해당 구성 요소의 수량을 나타냄. 여기서는 워크시트가 37개, "이름 지정된 범위" 가 45개 있다는 것을 나타냄. TitlesOfParts 는 문서 내의 각 파트(예: 워크시트, 차트 ,테이블) 등의 이름을 나열해주고, "Raw_DOC", "Tables", "TOC" 등이 그 예시임.

 

LinksUpToDate, SharedDoc, HyperlinksChanged 는 문서의 상태를 나타내는 불리언 값. 여기서 모두 false 로 설정돼 있는데, 링크가 최신 상태가 아니고, 공유문서가 아니고, 하이퍼링크가 변경되지 않았음을 나타낸다고 함. 

 

AppVersion 요소에 문서를 생성한 어플리케이션의 버전을 나타내는데, 여기에 16.0300 이면 excel 2016 또는 office 365 버전임.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Properties
	xmlns="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties"
	xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes">
	<Application>Microsoft Excel</Application>
	<DocSecurity>0</DocSecurity>
	<ScaleCrop>false</ScaleCrop>
	<HeadingPairs>
		<vt:vector size="4" baseType="variant">
			<vt:variant>
				<vt:lpstr>워크시트</vt:lpstr>
			</vt:variant>
			<vt:variant>
				<vt:i4>37</vt:i4>
			</vt:variant>
			<vt:variant>
				<vt:lpstr>이름 지정된 범위</vt:lpstr>
			</vt:variant>
			<vt:variant>
				<vt:i4>45</vt:i4>
			</vt:variant>
		</vt:vector>
	</HeadingPairs>
	<TitlesOfParts>
		<vt:vector size="82" baseType="lpstr">
			<vt:lpstr>Raw_DOC</vt:lpstr>
			<vt:lpstr>Tables</vt:lpstr>
			<vt:lpstr>TOC</vt:lpstr>
			<vt:lpstr>BS</vt:lpstr>
			<vt:lpstr>BS_천</vt:lpstr>
			<vt:lpstr>PL</vt:lpstr>
			<vt:lpstr>PL_천</vt:lpstr>
			<vt:lpstr>CE</vt:lpstr>
			<vt:lpstr>CE_천</vt:lpstr>
			<vt:lpstr>CF</vt:lpstr>
			<vt:lpstr>CF_천</vt:lpstr>
			<vt:lpstr>1</vt:lpstr>
			<vt:lpstr>2</vt:lpstr>
			<vt:lpstr>3</vt:lpstr>
			<vt:lpstr>4</vt:lpstr>
			<vt:lpstr>5</vt:lpstr>
			<vt:lpstr>6</vt:lpstr>
			<vt:lpstr>7</vt:lpstr>
			<vt:lpstr>8</vt:lpstr>
			<vt:lpstr>9</vt:lpstr>
			<vt:lpstr>10</vt:lpstr>
			<vt:lpstr>11</vt:lpstr>
			<vt:lpstr>12</vt:lpstr>
			<vt:lpstr>13</vt:lpstr>
			<vt:lpstr>14</vt:lpstr>
			<vt:lpstr>15</vt:lpstr>
			<vt:lpstr>16</vt:lpstr>
			<vt:lpstr>17</vt:lpstr>
			<vt:lpstr>18</vt:lpstr>
			<vt:lpstr>19</vt:lpstr>
			<vt:lpstr>20</vt:lpstr>
			<vt:lpstr>21</vt:lpstr>
			<vt:lpstr>22</vt:lpstr>
			<vt:lpstr>23</vt:lpstr>
			<vt:lpstr>24</vt:lpstr>
			<vt:lpstr>25</vt:lpstr>
			<vt:lpstr>26</vt:lpstr>
			<vt:lpstr>FN_1</vt:lpstr>
			<vt:lpstr>FN_1.2</vt:lpstr>
			<vt:lpstr>FN_10</vt:lpstr>
			<vt:lpstr>FN_10.2</vt:lpstr>
			<vt:lpstr>FN_11</vt:lpstr>
			<vt:lpstr>FN_13</vt:lpstr>
			<vt:lpstr>FN_13.2</vt:lpstr>
			<vt:lpstr>FN_14</vt:lpstr>
			<vt:lpstr>FN_14.2</vt:lpstr>
			<vt:lpstr>FN_15</vt:lpstr>
			<vt:lpstr>FN_16</vt:lpstr>
			<vt:lpstr>FN_17</vt:lpstr>
			<vt:lpstr>FN_18</vt:lpstr>
			<vt:lpstr>FN_19</vt:lpstr>
			<vt:lpstr>FN_2</vt:lpstr>
			<vt:lpstr>FN_2.2</vt:lpstr>
			<vt:lpstr>FN_20</vt:lpstr>
			<vt:lpstr>FN_21</vt:lpstr>
			<vt:lpstr>FN_22</vt:lpstr>
			<vt:lpstr>FN_22.2</vt:lpstr>
			<vt:lpstr>FN_23</vt:lpstr>
			<vt:lpstr>FN_23.2</vt:lpstr>
			<vt:lpstr>FN_23.3</vt:lpstr>
			<vt:lpstr>FN_23.4</vt:lpstr>
			<vt:lpstr>FN_23.5</vt:lpstr>
			<vt:lpstr>FN_23.6</vt:lpstr>
			<vt:lpstr>FN_3</vt:lpstr>
			<vt:lpstr>FN_5</vt:lpstr>
			<vt:lpstr>FN_6</vt:lpstr>
			<vt:lpstr>FN_7</vt:lpstr>
			<vt:lpstr>FN_8</vt:lpstr>
			<vt:lpstr>FN_8.2</vt:lpstr>
			<vt:lpstr>FN_8.3</vt:lpstr>
			<vt:lpstr>FN_8.4</vt:lpstr>
			<vt:lpstr>FN_8.5</vt:lpstr>
			<vt:lpstr>FN_9</vt:lpstr>
			<vt:lpstr>FN_9.2</vt:lpstr>
			<vt:lpstr>FS_BS</vt:lpstr>
			<vt:lpstr>FS_BS_천</vt:lpstr>
			<vt:lpstr>FS_CE</vt:lpstr>
			<vt:lpstr>FS_CE_천</vt:lpstr>
			<vt:lpstr>FS_CF</vt:lpstr>
			<vt:lpstr>FS_CF_천</vt:lpstr>
			<vt:lpstr>FS_PL</vt:lpstr>
			<vt:lpstr>FS_PL_천</vt:lpstr>
		</vt:vector>
	</TitlesOfParts>
	<LinksUpToDate>false</LinksUpToDate>
	<SharedDoc>false</SharedDoc>
	<HyperlinksChanged>false</HyperlinksChanged>
	<AppVersion>16.0300</AppVersion>
</Properties>

 

 

docProps\core.xml 파일은 아래와 같다. 문서에 대한 핵심 메타데이터를 정의하는데, 파일의 구조와 엘리먼트는 아래와 같음. 먼저 루트 요소오 아래오 같이 다양하게 cp, dc, dcterms, dcmitype, xsi 등을 정리한다. 또한 lastModifiedBy 는 문서가 마지막으로 수정한 사람의 이름을 나타내며, dcterms:created 로 문서가 처음 생성된 날짜와 시간을 나타내는데, 여기에서는 국제 표준날짜 및 시간 형식을 따른다. dcterms:modified 는 문서가 마지마으로 수정된 날짜와 시간을 나타냄. 특히 문서의 버전관리와 검색 최적화 등에 용이하게 쓰이게됨.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<cp:coreProperties
	xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:dcterms="http://purl.org/dc/terms/"
	xmlns:dcmitype="http://purl.org/dc/dcmitype/"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<cp:lastModifiedBy>docsking</cp:lastModifiedBy>
	<dcterms:created xsi:type="dcterms:W3CDTF">2024-02-02T09:19:57Z</dcterms:created>
	<dcterms:modified xsi:type="dcterms:W3CDTF">2024-02-05T00:41:07Z</dcterms:modified>
</cp:coreProperties>

 

다음은 [Content_Types].xml 파일의 내용임. 해당 파일은 문서의 구성 요소를 어떻게 해석해야되는 지를 알려주는 중요 파일 역할을 함. Type 루트 요소는 모든 컨텐츠 유형 정의를 감싸며, xmlns 속성을 통해 컨텐츠 유형을 정의하는 스키마의 네임스페이스를 선언. 

 

Default 요소는 특정 파일 확장자에 대한 기본 컨텐츠 유형을 정의. 예를 들어, .rels 확장자는 관계들을 정의하는 xml 파일에 대한 컨텐츠 유형. 

 

.xml 확장자는 일반적인 'application/xml' 의 콘텐츠 유형을 가짐.

 

Override 요소는 특정 문서 파트의 이름을 명시하고, 이러한 개별 파일에 대해 특별한 컨텐츠 유형을 할당, 

예를 들어 'xl/workbook.xml'  파일은 excel 워크북의 메인 파일로, 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml' 콘텐츠 유형을 가짐. 'http://xl/worksheets/sheet1.xml' 부터 'http://xl/worksheets/sheet37.xml' 까지 각각의 요소는 개별 워크시트 파일에 대한 콘텐츠 유형을 정의하며, 모두 'application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml' 유형을 사용함. 

또한 스타일, 공유 문자열, 계산 체인, 테마 및 문서의 핵심 및 확장 속성 파일 등에 대한 컨텐츠 유형도 정의됨. 

<?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="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/>
	<Override PartName="/xl/worksheets/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
	<Override PartName="/xl/worksheets/sheet2.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
	<Override PartName="/xl/worksheets/sheet3.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
	<Override PartName="/xl/worksheets/sheet4.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
	<Override PartName="/xl/worksheets/sheet5.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
	<Override PartName="/xl/worksheets/sheet6.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
	<Override PartName="/xl/worksheets/sheet7.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
	<Override PartName="/xl/worksheets/sheet8.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
	<Override PartName="/xl/worksheets/sheet9.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
	<Override PartName="/xl/worksheets/sheet10.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
	<Override PartName="/xl/worksheets/sheet11.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
	<Override PartName="/xl/worksheets/sheet12.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
	<Override PartName="/xl/worksheets/sheet13.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
	<Override PartName="/xl/worksheets/sheet14.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
	<Override PartName="/xl/worksheets/sheet15.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
	<Override PartName="/xl/worksheets/sheet16.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
	<Override PartName="/xl/worksheets/sheet17.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
	<Override PartName="/xl/worksheets/sheet18.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
	<Override PartName="/xl/worksheets/sheet19.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
	<Override PartName="/xl/worksheets/sheet20.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
	<Override PartName="/xl/worksheets/sheet21.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
	<Override PartName="/xl/worksheets/sheet22.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
	<Override PartName="/xl/worksheets/sheet23.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
	<Override PartName="/xl/worksheets/sheet24.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
	<Override PartName="/xl/worksheets/sheet25.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
	<Override PartName="/xl/worksheets/sheet26.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
	<Override PartName="/xl/worksheets/sheet27.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
	<Override PartName="/xl/worksheets/sheet28.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
	<Override PartName="/xl/worksheets/sheet29.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
	<Override PartName="/xl/worksheets/sheet30.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
	<Override PartName="/xl/worksheets/sheet31.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
	<Override PartName="/xl/worksheets/sheet32.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
	<Override PartName="/xl/worksheets/sheet33.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
	<Override PartName="/xl/worksheets/sheet34.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
	<Override PartName="/xl/worksheets/sheet35.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
	<Override PartName="/xl/worksheets/sheet36.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
	<Override PartName="/xl/worksheets/sheet37.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
	<Override PartName="/xl/theme/theme1.xml" ContentType="application/vnd.openxmlformats-officedocument.theme+xml"/>
	<Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"/>
	<Override PartName="/xl/sharedStrings.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml"/>
	<Override PartName="/xl/calcChain.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+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>

 

반응형

댓글