首页 > 代码库 > Excel 2007 底层实现方式

Excel 2007 底层实现方式

这里先看excel内容(一个7行6列的excel,红色箭头指向的是没有内容,空白的):

技术分享

一、 excel2007是使用xml格式来存储的,把一个excel文件后缀改为.zip,打开之后就直接可以看到一个excel文件对应的xml格式的文件了。

技术分享

1.1、docProps目录

技术分享

1.1.1、 core.xml文件

  创建时间和修改时间,标题,主题和作者

技术分享
<?xml version="1.0" encoding="utf-8"?>
<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">
  <!-- 创建人 -->
  <dc:creator>Administrator</dc:creator>
  <!-- 最后修改人 -->
  <cp:lastModifiedBy>Administrator</cp:lastModifiedBy>
  <!-- 创建时间 -->
  <dcterms:created xsi:type="dcterms:W3CDTF">2008-09-11T17:22:52Z</dcterms:created>
  <!-- 修改时间 -->
  <dcterms:modified xsi:type="dcterms:W3CDTF">2017-03-31T15:29:39Z</dcterms:modified>
</cp:coreProperties>
View Code

1.1.2、 app.xml文件

  文档的其他属性,文档类型,版本,是否只读,是否共享,安全属性等文档属性信息

技术分享
<?xml version="1.0" encoding="utf-8"?>

<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="2" baseType="variant">
      <vt:variant>
        <vt:lpstr>工作表</vt:lpstr>
      </vt:variant>
      <vt:variant>
        <vt:i4>3</vt:i4>
      </vt:variant>
    </vt:vector>
  </HeadingPairs>
  
  <TitlesOfParts>
    <vt:vector size="3" baseType="lpstr">
      <vt:lpstr>Sheet1</vt:lpstr>
      <vt:lpstr>Sheet2</vt:lpstr>
      <vt:lpstr>Sheet3</vt:lpstr>
    </vt:vector>
  </TitlesOfParts>
  
  <Company/>
  
  <LinksUpToDate>false</LinksUpToDate>
  <!-- 是否共享 -->
  <SharedDoc>false</SharedDoc>
  <HyperlinksChanged>false</HyperlinksChanged>
  <!-- 版本 -->
  <AppVersion>12.0000</AppVersion>
</Properties>
View Code

 1.2、 xl目录

技术分享

1.2.1、workbook.xml文件

  文件包含一对<sheets>标签,其中的每个<sheet>元素都代表Excel 2007文件中的一个,工作表的名称就是其name属性的值,这里有三个sheet

技术分享
<?xml version="1.0" encoding="utf-8"?>

<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" 
  xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
  <fileVersion appName="xl" lastEdited="4" lowestEdited="4" rupBuild="4506"/>
  <workbookPr defaultThemeVersion="124226"/>
  <bookViews>
    <workbookView xWindow="0" yWindow="105" windowWidth="12765" windowHeight="5715"/>
  </bookViews>
  <sheets>
    <sheet name="Sheet1" sheetId="1" r:id="rId1"/>
    <sheet name="Sheet2" sheetId="2" r:id="rId2"/>
    <sheet name="Sheet3" sheetId="3" r:id="rId3"/>
  </sheets>
  <calcPr calcId="125725"/>
</workbook>
View Code

1.2.2、 _rels/workbook.xml.rels

  定义每个sheetid对应的sheet内容文件sheet1.xml,共享的单元格内容文件sharedstring.xml,样式文件style.xml是当前单元格的样式字体,颜色等样式的xml配置。

技术分享
<?xml version="1.0" encoding="utf-8"?>

<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
  <Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet3.xml"/>
  <Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet2.xml"/>
  <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet1.xml"/>
  <Relationship Id="rId6" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings" Target="sharedStrings.xml"/>
  <Relationship Id="rId5" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/>
  <Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" Target="theme/theme1.xml"/>
</Relationships>
View Code

1.2.3、 worksheets文件夹

技术分享

打开一个sheet1.xml看看,我们找到对应的第一行第一列的值索引为0对应到sharedStrings.xml里面的index的值,这里si从0开始,第一个即为index为0的值,刚好跟我们的excel的A1值符合

技术分享
<?xml version="1.0" encoding="utf-8"?>

<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
  <dimension ref="A1:F7"/>
  <sheetViews>
    <sheetView tabSelected="1" workbookViewId="0">
      <selection activeCell="H6" sqref="H6"/>
    </sheetView>
  </sheetViews>
  <sheetFormatPr defaultRowHeight="14.25"/>
  <cols>
    <col min="6" max="6" width="10.875" customWidth="1"/>
  </cols>
  <sheetData>
    <! -- row标签是表示每一行的数据,r表示第几行,其他几个都是这几行的样式 -->
    <row r="1" spans="1:6">
      <!-- c标签表示每个单元格的内容,这里A1 第一行的第一列,r表示位置,s表示这个单元格的样式,
        s=9对应style.xml的的index为9的样式即为这个单元格的样式,
        t=s表示这个单元格的值对应到sharedstring.xml中,里面的v标签即为该列的值在sharedstring.xml中的索引位置。
        sharedstring.xml中每一个<si><si>代表一个值索引,从0开始计算
      -->
      <c r="A1" t="s">
        <v>0</v>
      </c>
      <c r="B1" t="s">
        <v>1</v>
      </c>
      <c r="C1" t="s">
        <v>2</v>
      </c>
      <c r="D1" t="s">
        <v>3</v>
      </c>
      <!-- 数字列,就直接展示数字 -->
      <c r="E1">
        <v>123</v>
      </c>
      <!-- 日期列,对应到style.xml中-->
      <c r="F1" s="1">
        <v>40941</v>
      </c>
    </row>
    <row r="2" spans="1:6">
      <c r="B2" t="s">
        <v>9</v>
      </c>
      <c r="C2" t="s">
        <v>14</v>
      </c>
      <c r="D2" t="s">
        <v>19</v>
      </c>
      <c r="E2">
        <v>123</v>
      </c>
      <c r="F2" s="1">
        <v>40942</v>
      </c>
    </row>
    <row r="3" spans="1:6">
      <c r="A3" t="s">
        <v>4</v>
      </c>
      <c r="C3" t="s">
        <v>15</v>
      </c>
      <c r="D3" t="s">
        <v>20</v>
      </c>
      <c r="E3">
        <v>123</v>
      </c>
      <c r="F3" s="1">
        <v>40943</v>
      </c>
    </row>
    <row r="4" spans="1:6">
      <c r="A4" t="s">
        <v>5</v>
      </c>
      <c r="B4" t="s">
        <v>10</v>
      </c>
      <c r="D4" t="s">
        <v>21</v>
      </c>
      <c r="E4">
        <v>123</v>
      </c>
      <c r="F4" s="1">
        <v>40944</v>
      </c>
    </row>
    <row r="5" spans="1:6">
      <c r="A5" t="s">
        <v>6</v>
      </c>
      <c r="B5" t="s">
        <v>11</v>
      </c>
      <c r="C5" t="s">
        <v>16</v>
      </c>
      <c r="E5">
        <v>123</v>
      </c>
      <c r="F5" s="1">
        <v>40945</v>
      </c>
    </row>
    <row r="6" spans="1:6">
      <c r="A6" t="s">
        <v>7</v>
      </c>
      <c r="B6" t="s">
        <v>12</v>
      </c>
      <c r="C6" t="s">
        <v>17</v>
      </c>
      <c r="D6" t="s">
        <v>22</v>
      </c>
      <c r="F6" s="1">
        <v>40946</v>
      </c>
    </row>
    <row r="7" spans="1:6">
      <c r="A7" t="s">
        <v>8</v>
      </c>
      <c r="B7" t="s">
        <v>13</v>
      </c>
      <c r="C7" t="s">
        <v>18</v>
      </c>
      <c r="D7" t="s">
        <v>23</v>
      </c>
      <c r="E7">
        <v>123</v>
      </c>
      <c r="F7" s="1"/>
    </row>
  </sheetData>
  <phoneticPr fontId="1" type="noConversion"/>
  <pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/>
</worksheet>
View Code

1.2.4、sharedStrings.xml文件

技术分享
<?xml version="1.0" encoding="utf-8"?>

<sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" count="24" uniqueCount="24">
  <!--  sheet中对应的索引0 -->
  <si>
    <t>A1</t>
    <phoneticPr fontId="1" type="noConversion"/>
  </si>
  <!--  sheet中对应的索引1 -->
  <si>
    <t>B1</t>
    <phoneticPr fontId="1" type="noConversion"/>
  </si>
  <si>
    <t>C1</t>
    <phoneticPr fontId="1" type="noConversion"/>
  </si>
  <si>
    <t>D1</t>
    <phoneticPr fontId="1" type="noConversion"/>
  </si>
  <si>
    <t>A3</t>
  </si>
  <si>
    <t>A4</t>
  </si>
  <si>
    <t>A5</t>
  </si>
  <si>
    <t>A6</t>
  </si>
  <si>
    <t>A7</t>
  </si>
  <si>
    <t>B2</t>
  </si>
  <si>
    <t>B4</t>
  </si>
  <si>
    <t>B5</t>
  </si>
  <si>
    <t>B6</t>
  </si>
  <si>
    <t>B7</t>
  </si>
  <si>
    <t>C2</t>
  </si>
  <si>
    <t>C3</t>
  </si>
  <si>
    <t>C5</t>
  </si>
  <si>
    <t>C6</t>
  </si>
  <si>
    <t>C7</t>
  </si>
  <si>
    <t>D2</t>
  </si>
  <si>
    <t>D3</t>
  </si>
  <si>
    <t>D4</t>
  </si>
  <si>
    <t>D6</t>
  </si>
  <si>
    <t>D7</t>
  </si>
</sst>
View Code

1.2.5、style.xml文件

技术分享
<?xml version="1.0" encoding="utf-8"?>

<styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
  <fonts count="2">
    <font>
      <sz val="11"/>
      <color theme="1"/>
      <name val="Tahoma"/>
      <family val="2"/>
      <charset val="134"/>
    </font>
    <font>
      <sz val="9"/>
      <name val="Tahoma"/>
      <family val="2"/>
      <charset val="134"/>
    </font>
  </fonts>
  <fills count="2">
    <fill>
      <patternFill patternType="none"/>
    </fill>
    <fill>
      <patternFill patternType="gray125"/>
    </fill>
  </fills>
  <borders count="1">
    <border>
      <left/>
      <right/>
      <top/>
      <bottom/>
      <diagonal/>
    </border>
  </borders>
  <cellStyleXfs count="1">
    <xf numFmtId="0" fontId="0" fillId="0" borderId="0"/>
  </cellStyleXfs>
  <cellXfs count="2">
    <xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0"/>
    <xf numFmtId="14" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/>
  </cellXfs>
  <cellStyles count="1">
    <cellStyle name="常规" xfId="0" builtinId="0"/>
  </cellStyles>
  <dxfs count="0"/>
  <tableStyles count="0" defaultTableStyle="TableStyleMedium9" defaultPivotStyle="PivotStyleLight16"/>
</styleSheet>
View Code

 

Excel 2007 底层实现方式