Excel2001文件XML
看看Excel2007工作簿文件
一个Excel2007文件就是一个压缩了的容器,其中包含着一些文件和文件夹。要查看这些文件和文件夹,只需将Excel2007的文件扩展名改为.zip或者.rar,即压缩文件的扩展名,也可以直接在Excel2007文件的扩展名后添加.zip或者.rar。
新建一个Excel2007工作簿,将该工作簿命名为test1.xlsx,然后关闭该工作簿。按上面的方法在该工作簿文件名后加上扩展名.zip,重命名该工作簿。
图1:重命名该工作簿
图2:加上压缩文件的扩展名
双击该工作簿文件,可以看到这个Excel2007文件的XML文件包结构如下:
图3:Excel2007的.xlsx文件的内容
此时,打开名为“xl”的文件夹,其包含的内容为:
图4:“xl”文件夹中的内容,如果工作簿中有VB工程,则会出现相应的二进制文件
Workbook.xml文件包含的内容如下:
图5:“Workbook.xml”文件,可直接在文件名上双击打开
在这里,可以看到各工作表对应的id号,即r:id。如果想操作某工作表,则先找到其r:id。例如,工作表“Sheet3”的r:id为rId3。
在图4中的文件夹“_rels”里,有一个名为“Workbook.xml.rels”的文件,包含着xml的代码片断:
图6:“Workbook.xml.rels”文件表明工作表中有哪些文件
读取单元格的值
工作表“Sheet3”中的内容为:
图7:工作表Sheet3中的内容
sheet3.xml文件为:
图8:sheet3.xml,显示了单元格A1、A2和A3
但是,如何知道单元格A1中的内容呢?看上面的内容:<c r=”A1” t=”s”>,可知单元格A1中包含有一个字符串;下一行:<v>0</v>,告诉需要在“SharedStrings.xml”文件中找到第0项。“SharedStrings.xml”文件顶部的内容为:
表明在该工作簿中只有1个独立的字符串。注意,索引值是以0为基数开始的。上面的内容告诉需要查找的索引号为0,即该XML文件最开始的部分:
图9
在单元格中添加文本
现在,如果想在工作表Sheet3中添加新的文本“新的课目”。
首先,修改“SharedStrings.xml”文件的顶部内容:
修改为:
一个Excel2007文件就是一个压缩了的容器,其中包含着一些文件和文件夹。要查看这些文件和文件夹,只需将Excel2007的文件扩展名改为.zip或者.rar,即压缩文件的扩展名,也可以直接在Excel2007文件的扩展名后添加.zip或者.rar。
新建一个Excel2007工作簿,将该工作簿命名为test1.xlsx,然后关闭该工作簿。按上面的方法在该工作簿文件名后加上扩展名.zip,重命名该工作簿。
图1:重命名该工作簿
图2:加上压缩文件的扩展名
双击该工作簿文件,可以看到这个Excel2007文件的XML文件包结构如下:
图3:Excel2007的.xlsx文件的内容
此时,打开名为“xl”的文件夹,其包含的内容为:
图4:“xl”文件夹中的内容,如果工作簿中有VB工程,则会出现相应的二进制文件
Workbook.xml文件包含的内容如下:
图5:“Workbook.xml”文件,可直接在文件名上双击打开
在这里,可以看到各工作表对应的id号,即r:id。如果想操作某工作表,则先找到其r:id。例如,工作表“Sheet3”的r:id为rId3。
在图4中的文件夹“_rels”里,有一个名为“Workbook.xml.rels”的文件,包含着xml的代码片断:
图6:“Workbook.xml.rels”文件表明工作表中有哪些文件
读取单元格的值
工作表“Sheet3”中的内容为:
图7:工作表Sheet3中的内容
sheet3.xml文件为:
图8:sheet3.xml,显示了单元格A1、A2和A3
但是,如何知道单元格A1中的内容呢?看上面的内容:<c r=”A1” t=”s”>,可知单元格A1中包含有一个字符串;下一行:<v>0</v>,告诉需要在“SharedStrings.xml”文件中找到第0项。“SharedStrings.xml”文件顶部的内容为:
表明在该工作簿中只有1个独立的字符串。注意,索引值是以0为基数开始的。上面的内容告诉需要查找的索引号为0,即该XML文件最开始的部分:
图9
在单元格中添加文本
现在,如果想在工作表Sheet3中添加新的文本“新的课目”。
首先,修改“SharedStrings.xml”文件的顶部内容:
修改为:
然后,在文件中添加新的字符串:
接着,将“sheet3.xml”文件打开,并添加下面的内容(所选取的部分):
现在,恢复工作簿扩展名并重新打开该工作簿后,如下所示:
图10:编辑xml文件后的结果
注:可以将压缩文件夹中要编辑的文件拖拉出来,用记事本或xml编辑器进行编辑并保存后,再将该文件拖回压缩文件夹中。
在单元格中添加数字
在单元格中添加数字与添加文本相似,但稍有不同。数字是直接保存在工作表xml文件中,并且可以添加数字格式。
例如,在前面的sheet3.xml文件中,数字单元格的格式为“常规”,并没有设置专门的格式。
单元格格式通过索引值来引用,如:
在单元格A3中显示的是日期。索引值1指向文件包中的另一个文件:styles.xml。单元格格式通过名为“cellXfs”的节点设置引用,在工作表xml文件中的s=”1”指向节点中的某一元素。素引值以0开始,因此索引值为1表示是第2项:
单元格格式交叉引用依次引用numFormatId列表、FontId列表、fillId列表和borderId列表,这些都包含在Styles.xml文件中。
因此,不能直接添加格式化的单元格到工作表中,必须检查是否指定的单元格格式组合已在单元格格式交叉引用中(Styles.xml文件),这要分别检查所有单个的格式引用。同时,如果格式组合是新的,则必须使用新格式扩展格式元素列表,并更新格式交叉引用。这些列表的所有“Count”的参数都需要更新。
改变窗体控件的属性
通常,窗体控件与控件工具箱中的控件不同,其外观、字体、颜色等属性不能改变。下面,使用工作簿的文件包来更改这些属性。
例如,工作簿FormControls.xlsx的工作表Sheet1如下:
图11:包含一些窗体控件的工作表
现在,来分析这些窗体控件存放的位置。将工作簿FormControls.xlsx重命名为FormControls.zip,然后打开文件夹“xl”和“Worksheets”。打开“sheet1.xml”文件,可以看到有下面的内容(阴影部分):
上面加亮显示的内容指向窗体控件文件。要找到“rId2”,打开“_rels”文件夹,如图12所示:
图12
打开“sheet1.xml.rels”文件,查找rId2:
在这里,可以看出应该查找文件“../drawings/vmlDrawing1.vml”。
每个工作表的.vml文件都包含着控件或者在该文件中能捕捉到的其它对象。
将vmlDrawing1.vml文件拖到桌面上,然后打开它进行编辑。窗体控件中复选框的字体是不能编辑的,但该文件的内容展示了复选框的xml部分,现在来改变这个复选框中的字体。
将上面的内容:
<font face="宋体" size="180" color="auto">复选框 3</font>
改为:
<font face="Arial Black" size="320" color="auto">复选框 3</font>
保存并关闭该vml文件,然将其拖放到压缩文件夹中的Drawings文件夹中,再将FormControls.zip改为FormControls.xlsx,打开该工作簿,则复选框显示如下:
图13:修改字体后的复选框
从这个vml文件中,也可以看出关于控件的其它信息,例如位置,即Anchor。因此,可以通过vml文件改变控件的位置。
也可以更改复选框字体的颜色,如将内容:
<font face="Arial Black" size="320" color="auto">复选框 3</font>
改为:
<font face="Arial Black" size="320" color="#FF0066">复选框 3</font>
保存该vml文件并拖放至相应的压缩文件夹,然后将.zip文件改回.xlsx文件,打开工作簿后的复选框显示如下:
图13:修改字体和颜色后的复选框
通过上面的介绍,大家可以寻找并更改这些xml文件中的其它内容,以实现不同的处理。