代码改变世界

解析Excel2007之关键点_Sheet.xml(二)

2009-05-03 14:30  ︶ㄣ木べ头  阅读(663)  评论(0编辑  收藏  举报

来源于:http://gaby.cnblogs.com/

作者:Gaby,昵称:木头

说明:本人能力有限,所有文章均作为自己的学习笔记,如果不对或者不合理的地方, 欢迎留言提出,谢谢支持!

为了说明sheetData节点里面的内容,下面引用添加我的解析测试文件的sheetData的全部内容如下:

<sheetData>
    <row r="2" spans="2:6">
      <c r="B2" t="s">
        <v>0</v>
      </c>
    </row>
    <row r="4" spans="2:6">
      <c r="B4" t="s">
        <v>1</v>
      </c>
      <c r="C4" t="s">
        <v>2</v>
      </c>
      <c r="D4" t="s">
        <v>3</v>
      </c>
    </row>
    <row r="5" spans="2:6">
      <c r="B5">
        <v>648</v>
      </c>
      <c r="C5">
        <v>352</v>
      </c>
      <c r="D5">
        <f>SUM(B5:C5)</f>
        <v>1000</v>
      </c>
      <c r="E5" s="11">
        <v>98741</v>
      </c>
    </row>
    <row r="8" spans="2:6">
      <c r="B8" s="1" t="s">
        <v>4</v>
      </c>
      <c r="C8" s="2" t="s">
        <v>5</v>
      </c>
      <c r="D8" s="3" t="s">
        <v>6</v>
      </c>
      <c r="E8" s="4" t="s">
        <v>7</v>
      </c>
      <c r="F8" s="7" t="s">
        <v>10</v>
      </c>
    </row>
    <row r="11" spans="2:6">
      <c r="B11" s="5" t="s">
        <v>8</v>
      </c>
      <c r="C11" s="6" t="s">
        <v>9</v>
      </c>
      <c r="E11" s="9" t="s">
        <v>12</v>
      </c>
    </row>
    <row r="14" spans="2:6">
      <c r="B14" s="8" t="s">
        <v>11</v>
      </c>
      <c r="C14" s="8"/>
      <c r="D14" s="8"/>
      <c r="E14" s="8"/>
    </row>
    <row r="17" spans="2:7" ht="51" customHeight="1">
      <c r="G17" s="10" t="s">
        <v>13</v>
      </c>
    </row>
    <row r="20" spans="2:7">
      <c r="B20" t="s">
        <v>14</v>
      </c>
      <c r="E20" t="s">
        <v>15</v>
      </c>
    </row>
    <row r="28" spans="2:7">
      <c r="B28" t="s">
        <v>16</v>
      </c>
    </row>
  </sheetData>

就不拐弯抹角的说了,直接把我研究出来的表述出来好了。

1、每个row节点对应的就是Excel表格中的每一行,并且它们是有序的,也就是说,如B2所在行对应的节点和B4所在行对应的节点,在文档中的上下顺序不可以对调!(PS:发现这一点我想到了我们以后如果想通过修改过该文件来做动态报表,会有些麻烦了,不过我看到后面的问题,觉得后面的麻烦更大,继续..)。

2、这里一般只记录哪些经过您修改过的单元格,也就是说,打开Excel,里面哪些空的没有修改过样式的单元格,在这文档中是不保存的。

3、我们看到了每个row节点有好多种属性我们先来解析下这些属性

r:行号,也就是多少行,从1开始计数

spans:空隙,不知道2:6、2:7是什么意思

ht:是单元格的高度值,如51(68像素)

customHeight:表示是否是客户自定义高度,1是true

4、每个row下有一个或多个c子节点,c是Cell的简写,就是单元格,下面是它的属性说明

r:单元格编号

s:Style的简写,对应的值是Style.xml文档中cellXfs子节点中对应的节点序号,从0开始计数。(具体的后面还会继续说)

t:Type的简写,表示的是这个单元格里面的内容类型,默认是数字,“s”表示的是字符串。

子节点 v:是Value的简写,如果t为空,即表示的是数字,那么这个v里面的数字就是值。如果t是“s”,那么这里的v里的值表示的就是sharedStrings.xml文档中sst子节点的序号,如在这里,B28单元格,v是16,那么该单元格里面的内容就是sst节点下从上到下第17个子节点里面的字符内容。从0开始计数。

子节点 f:是formula的简写,里面存放的是公式。

 

全都解释了下,如果有错误的请见谅。

下面说下我考虑到的麻烦事情,我们在操作的时候,如果要插入一个行,那是不是意味着我们要更新插入位置下所有row节点、c节点的r值以及相应的公式内容!这样的话,首先要解析r和f的值,然后更新,替换……这样的性能应该会大打折扣,而且操作上的复杂程度也是很大的,真不知的要怎么解决啊!

 

基本的和重要的好像就这些了,下次详细说下style文档以及chart和drawing吧。